
Key Required

local Fluent = loadstring(game:HttpGet("https://github.com/dawid-scripts/Fluent/releases/latest/download/main.lua"))()
local SaveManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/SaveManager.lua"))()
local InterfaceManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/InterfaceManager.lua"))()
local Window = Fluent:CreateWindow({
Title = "Rane X Hub ",
SubTitle = "Overhaul Made by larky",
TabWidth = 160,
Size = UDim2.fromOffset(580, 460),
Acrylic = true,
Theme = "Crimson",
MinimizeKey = Enum.KeyCode.X
})
local FloatingButton = loadstring(game:HttpGet("https://raw.githubusercontent.com/Nyxarth910/Draconic-Hub-X/refs/heads/main/Files/Floating%20Button.lua",true))()
FloatingButton.init(Window)
local Tabs = {
Main = Window:AddTab({ Title = "Main", Icon = "home" })
}
local Options = Fluent.Options
Fluent:Notify({
Title = "Rane X Evade",
Content = "System Loaded",
Duration = 1
})
-- Services
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local VirtualUser = game:GetService("VirtualUser")
local LocalPlayer = Players.LocalPlayer
-- Billboard ESP Variables
local NextbotBillboards = {}
local PlayerBillboards = {}
local TicketBillboards = {}
-- Tracer ESP Variables
local playerTracerElements = {}
local botTracerElements = {}
local playerTracerConnection = nil
local botTracerConnection = nil
-- Auto Respawn Variables
local lastSavedPosition = nil
local respawnConnection = nil
local AutoSelfReviveConnection = nil
local hasRevived = false
local SelfReviveMethod = "Spawnpoint"
-- New Feature Variables
local AntiAFKConnection = nil
local autoWhistleHandle = nil
local stableCameraInstance = nil
-- Get nextbot names from ReplicatedStorage
local nextBotNames = {}
if ReplicatedStorage:FindFirstChild("NPCs") then
for _, npc in ipairs(ReplicatedStorage.NPCs:GetChildren()) do
table.insert(nextBotNames, npc.Name)
end
end
function isNextbotModel(model)
if not model or not model.Name then return false end
for _, name in ipairs(nextBotNames) do
if model.Name == name then return true end
end
return model.Name:lower():find("nextbot") or
model.Name:lower():find("scp") or
model.Name:lower():find("monster") or
model.Name:lower():find("creep") or
model.Name:lower():find("enemy") or
model.Name:lower():find("zombie") or
model.Name:lower():find("ghost") or
model.Name:lower():find("demon")
end
function getDistanceFromPlayer(targetPosition)
if not LocalPlayer.Character or not LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then
return 0
end
local distance = (targetPosition - LocalPlayer.Character.HumanoidRootPart.Position).Magnitude
return math.floor(distance)
end
-- ==================== BILLBOARD ESP FUNCTIONS ====================
function CreateBillboardESP(Name, Part, Color, TextSize)
if not Part or Part:FindFirstChild(Name) then return nil end
local BillboardGui = Instance.new("BillboardGui")
local TextLabel = Instance.new("TextLabel")
local TextStroke = Instance.new("UIStroke")
BillboardGui.Parent = Part
BillboardGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
BillboardGui.Name = Name
BillboardGui.AlwaysOnTop = true
BillboardGui.LightInfluence = 1
BillboardGui.Size = UDim2.new(0, 200, 0, 50)
BillboardGui.StudsOffset = Vector3.new(0, 3, 0)
BillboardGui.MaxDistance = 1000
TextLabel.Parent = BillboardGui
TextLabel.BackgroundTransparency = 1
TextLabel.Size = UDim2.new(1, 0, 1, 0)
TextLabel.TextScaled = false
TextLabel.Font = Enum.Font.SourceSansBold
TextLabel.TextSize = TextSize or 14
TextLabel.TextColor3 = Color or Color3.fromRGB(255, 255, 255)
TextStroke.Parent = TextLabel
TextStroke.Thickness = 2
TextStroke.Color = Color3.new(0, 0, 0)
return BillboardGui
end
function UpdateBillboardESP(Name, Part, NameText, Color, TextSize)
if not Part then return false end
local esp = Part:FindFirstChild(Name)
if esp and esp:FindFirstChildOfClass("TextLabel") then
local label = esp:FindFirstChildOfClass("TextLabel")
if Color then
label.TextColor3 = Color
end
if TextSize then
label.TextSize = TextSize
end
local distance = getDistanceFromPlayer(Part.Position)
local name = NameText or Part.Parent and Part.Parent.Name or Part.Name
label.Text = string.format("%s [%dm]", name, distance)
return true
end
return false
end
function DestroyBillboardESP(Name, Part)
if not Part then return false end
local esp = Part:FindFirstChild(Name)
if esp then
esp:Destroy()
return true
end
return false
end
local function scanForNextbots()
local nextbots = {}
local playersFolder = workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Players")
if playersFolder then
for _, model in ipairs(playersFolder:GetChildren()) do
if model:IsA("Model") and isNextbotModel(model) then
local hrp = model:FindFirstChild("HumanoidRootPart") or model:FindFirstChild("Head")
if hrp then
nextbots[model] = hrp
end
end
end
end
local npcsFolder = workspace:FindFirstChild("NPCs")
if npcsFolder then
for _, model in ipairs(npcsFolder:GetChildren()) do
if model:IsA("Model") and isNextbotModel(model) then
local hrp = model:FindFirstChild("HumanoidRootPart") or model:FindFirstChild("Head")
if hrp then
nextbots[model] = hrp
end
end
end
end
for model, hrp in pairs(nextbots) do
if not NextbotBillboards[model] then
local esp = CreateBillboardESP("NextbotESP", hrp, Color3.fromRGB(255, 0, 0), 16)
if esp then
UpdateBillboardESP("NextbotESP", hrp, model.Name, Color3.fromRGB(255, 0, 0), 16)
NextbotBillboards[model] = {esp = esp, hrp = hrp}
end
else
UpdateBillboardESP("NextbotESP", hrp, model.Name, Color3.fromRGB(255, 0, 0), 16)
end
end
for model, data in pairs(NextbotBillboards) do
if not nextbots[model] or not model.Parent then
if data.hrp then
DestroyBillboardESP("NextbotESP", data.hrp)
end
NextbotBillboards[model] = nil
end
end
end
local function scanForPlayers()
for _, player in pairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character then
local head = player.Character:FindFirstChild("Head") or player.Character:FindFirstChild("HumanoidRootPart")
if head then
if not PlayerBillboards[player] then
local esp = CreateBillboardESP("PlayerESP", head, Color3.fromRGB(0, 255, 0), 14)
if esp then
UpdateBillboardESP("PlayerESP", head, player.Name, Color3.fromRGB(0, 255, 0), 14)
PlayerBillboards[player] = esp
end
else
UpdateBillboardESP("PlayerESP", head, player.Name, Color3.fromRGB(0, 255, 0), 14)
end
end
elseif PlayerBillboards[player] then
if player.Character then
DestroyBillboardESP("PlayerESP", player.Character:FindFirstChild("Head") or player.Character:FindFirstChild("HumanoidRootPart"))
end
PlayerBillboards[player] = nil
end
end
end
local function scanForTickets()
local gameFolder = workspace:FindFirstChild("Game")
if gameFolder then
local effects = gameFolder:FindFirstChild("Effects")
if effects then
local tickets = effects:FindFirstChild("Tickets")
if tickets then
for _, ticket in pairs(tickets:GetChildren()) do
if ticket:IsA("BasePart") or ticket:IsA("Model") then
local part = ticket:IsA("Model") and ticket:FindFirstChild("Head") or ticket:IsA("BasePart") and ticket
if part then
if not TicketBillboards[ticket] then
local esp = CreateBillboardESP("TicketESP", part, Color3.fromRGB(255, 255, 0), 12)
if esp then
UpdateBillboardESP("TicketESP", part, "Ticket", Color3.fromRGB(255, 255, 0), 12)
TicketBillboards[ticket] = esp
end
else
UpdateBillboardESP("TicketESP", part, "Ticket", Color3.fromRGB(255, 255, 0), 12)
end
end
end
end
end
end
end
for ticket, esp in pairs(TicketBillboards) do
if not ticket or not ticket.Parent then
local part = ticket:IsA("Model") and ticket:FindFirstChild("Head") or ticket
if part then
DestroyBillboardESP("TicketESP", part)
end
TicketBillboards[ticket] = nil
end
end
end
-- ==================== TRACER ESP FUNCTIONS ====================
function createTracerObject()
local tracer = Drawing.new("Line")
tracer.Visible = false
tracer.Thickness = 1
tracer.ZIndex = 1
return tracer
end
function updatePlayerTracers()
local camera = workspace.CurrentCamera
if not camera then return end
local screenBottomCenter = Vector2.new(camera.ViewportSize.X / 2, camera.ViewportSize.Y)
local currentTargets = {}
for _, player in pairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character then
local hrp = player.Character:FindFirstChild("HumanoidRootPart")
if hrp then
currentTargets[player] = true
if not playerTracerElements[player] then
playerTracerElements[player] = createTracerObject()
end
local tracer = playerTracerElements[player]
local vector, onScreen = camera:WorldToViewportPoint(hrp.Position)
if onScreen then
tracer.Visible = true
tracer.From = screenBottomCenter
tracer.To = Vector2.new(vector.X, vector.Y)
tracer.Color = Color3.fromRGB(0, 255, 0)
else
tracer.Visible = false
end
end
end
end
for player, tracer in pairs(playerTracerElements) do
if not currentTargets[player] then
if tracer and tracer.Remove then
tracer:Remove()
end
playerTracerElements[player] = nil
end
end
end
function updateBotTracers()
local camera = workspace.CurrentCamera
if not camera then return end
local screenBottomCenter = Vector2.new(camera.ViewportSize.X / 2, camera.ViewportSize.Y)
local currentTargets = {}
local playersFolder = workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Players")
if playersFolder then
for _, model in pairs(playersFolder:GetChildren()) do
if model:IsA("Model") and isNextbotModel(model) then
local hrp = model:FindFirstChild("HumanoidRootPart")
if hrp then
currentTargets[model] = true
if not botTracerElements[model] then
botTracerElements[model] = createTracerObject()
end
local tracer = botTracerElements[model]
local vector, onScreen = camera:WorldToViewportPoint(hrp.Position)
if onScreen then
tracer.Visible = true
tracer.From = screenBottomCenter
tracer.To = Vector2.new(vector.X, vector.Y)
tracer.Color = Color3.fromRGB(255, 0, 0)
else
tracer.Visible = false
end
end
end
end
end
local npcsFolder = workspace:FindFirstChild("NPCs")
if npcsFolder then
for _, model in pairs(npcsFolder:GetChildren()) do
if model:IsA("Model") and isNextbotModel(model) then
local hrp = model:FindFirstChild("HumanoidRootPart")
if hrp then
currentTargets[model] = true
if not botTracerElements[model] then
botTracerElements[model] = createTracerObject()
end
local tracer = botTracerElements[model]
local vector, onScreen = camera:WorldToViewportPoint(hrp.Position)
if onScreen then
tracer.Visible = true
tracer.From = screenBottomCenter
tracer.To = Vector2.new(vector.X, vector.Y)
tracer.Color = Color3.fromRGB(255, 0, 0)
else
tracer.Visible = false
end
end
end
end
end
for model, tracer in pairs(botTracerElements) do
if not currentTargets[model] then
if tracer and tracer.Remove then
tracer:Remove()
end
botTracerElements[model] = nil
end
end
end
function startPlayerTracers()
if playerTracerConnection then return end
playerTracerConnection = RunService.RenderStepped:Connect(updatePlayerTracers)
end
function stopPlayerTracers()
if playerTracerConnection then
playerTracerConnection:Disconnect()
playerTracerConnection = nil
end
for player, tracer in pairs(playerTracerElements) do
if tracer and tracer.Remove then
tracer:Remove()
end
end
playerTracerElements = {}
end
function startBotTracers()
if botTracerConnection then return end
botTracerConnection = RunService.RenderStepped:Connect(updateBotTracers)
end
function stopBotTracers()
if botTracerConnection then
botTracerConnection:Disconnect()
botTracerConnection = nil
end
for model, tracer in pairs(botTracerElements) do
if tracer and tracer.Remove then
tracer:Remove()
end
end
botTracerElements = {}
end
-- ==================== AUTO RESPAWN FUNCTIONS ====================
local function startAutoRespawn()
if AutoSelfReviveConnection then
AutoSelfReviveConnection:Disconnect()
end
if respawnConnection then
respawnConnection:Disconnect()
end
local character = LocalPlayer.Character
if character then
local humanoid = character:WaitForChild("Humanoid")
local hrp = character:WaitForChild("HumanoidRootPart")
AutoSelfReviveConnection = character:GetAttributeChangedSignal("Downed"):Connect(function()
local isDowned = character:GetAttribute("Downed")
if isDowned then
if SelfReviveMethod == "Spawnpoint" then
if not hasRevived then
hasRevived = true
pcall(function()
ReplicatedStorage.Events.Player.ChangePlayerMode:FireServer(true)
end)
task.delay(10, function()
hasRevived = false
end)
end
elseif SelfReviveMethod == "Fake Revive" then
if hrp then
lastSavedPosition = hrp.Position
end
task.wait(3)
local startTime = tick()
repeat
pcall(function()
ReplicatedStorage:WaitForChild("Events"):WaitForChild("Player"):WaitForChild("ChangePlayerMode"):FireServer(true)
end)
until not character:GetAttribute("Downed") or (tick() - startTime > 1)
local newCharacter
repeat
newCharacter = LocalPlayer.Character
task.wait()
until newCharacter and newCharacter:FindFirstChild("HumanoidRootPart")
local newHRP = newCharacter:FindFirstChild("HumanoidRootPart")
if lastSavedPosition and newHRP then
newHRP.CFrame = CFrame.new(lastSavedPosition)
task.wait(0.5)
local movedDistance = (newHRP.Position - lastSavedPosition).Magnitude
if movedDistance > 1 then
lastSavedPosition = nil
end
end
end
end
end)
end
respawnConnection = LocalPlayer.CharacterAdded:Connect(function(newChar)
task.wait(1)
local newHumanoid = newChar:WaitForChild("Humanoid")
local newHRP = newChar:WaitForChild("HumanoidRootPart")
AutoSelfReviveConnection = newChar:GetAttributeChangedSignal("Downed"):Connect(function()
local isDowned = newChar:GetAttribute("Downed")
if isDowned then
if SelfReviveMethod == "Spawnpoint" then
if not hasRevived then
hasRevived = true
task.wait(3)
pcall(function()
ReplicatedStorage.Events.Player.ChangePlayerMode:FireServer(true)
end)
task.delay(10, function()
hasRevived = false
end)
end
elseif SelfReviveMethod == "Fake Revive" then
if newHRP then
lastSavedPosition = newHRP.Position
end
task.wait(3)
local startTime = tick()
repeat
pcall(function()
ReplicatedStorage:WaitForChild("Events"):WaitForChild("Player"):WaitForChild("ChangePlayerMode"):FireServer(true)
end)
task.wait(1)
until not newChar:GetAttribute("Downed") or (tick() - startTime > 1)
local freshCharacter
repeat
freshCharacter = LocalPlayer.Character
task.wait()
until freshCharacter and freshCharacter:FindFirstChild("HumanoidRootPart")
local freshHRP = freshCharacter:FindFirstChild("HumanoidRootPart")
if lastSavedPosition and freshHRP then
freshHRP.CFrame = CFrame.new(lastSavedPosition)
task.wait(0.5)
local movedDistance = (freshHRP.Position - lastSavedPosition).Magnitude
if movedDistance > 1 then
lastSavedPosition = nil
end
end
end
end
end)
end)
end
local function stopAutoRespawn()
if AutoSelfReviveConnection then
AutoSelfReviveConnection:Disconnect()
AutoSelfReviveConnection = nil
end
if respawnConnection then
respawnConnection:Disconnect()
respawnConnection = nil
end
hasRevived = false
lastSavedPosition = nil
end
-- ==================== NEW FEATURES ====================
-- Anti AFK Functions
local function startAntiAFK()
if AntiAFKConnection then return end
AntiAFKConnection = LocalPlayer.Idled:Connect(function()
VirtualUser:Button2Down(Vector2.new(0,0), workspace.CurrentCamera.CFrame)
task.wait(1)
VirtualUser:Button2Up(Vector2.new(0,0), workspace.CurrentCamera.CFrame)
end)
end
local function stopAntiAFK()
if AntiAFKConnection then
AntiAFKConnection:Disconnect()
AntiAFKConnection = nil
end
end
-- Auto Whistle Functions
local function startAutoWhistle()
if autoWhistleHandle then return end
autoWhistleHandle = task.spawn(function()
while autoWhistleHandle do
pcall(function()
ReplicatedStorage.Events.Character.Whistle:FireServer()
end)
task.wait(1)
end
end)
end
local function stopAutoWhistle()
if autoWhistleHandle then
task.cancel(autoWhistleHandle)
autoWhistleHandle = nil
end
end
-- No Camera Shake Functions
local StableCamera = {}
StableCamera.__index = StableCamera
function StableCamera.new(maxDistance)
local self = setmetatable({}, StableCamera)
self.Player = Players.LocalPlayer
self.MaxDistance = maxDistance or 50
self._conn = RunService.RenderStepped:Connect(function(dt) self:Update(dt) end)
return self
end
local function tryResetShake(player)
if not player then return end
local ok, playerScripts = pcall(function() return player:FindFirstChild("PlayerScripts") end)
if not ok or not playerScripts then return end
local cameraSet = playerScripts:FindFirstChild("Camera") and playerScripts.Camera:FindFirstChild("Set")
if cameraSet and type(cameraSet.Invoke) == "function" then
pcall(function()
cameraSet:Invoke("CFrameOffset", "Shake", CFrame.new())
end)
end
end
function StableCamera:Update(dt)
if Players and Players.LocalPlayer then
tryResetShake(Players.LocalPlayer)
end
end
function StableCamera:Destroy()
if self._conn then
self._conn:Disconnect()
self._conn = nil
end
end
local function startNoCameraShake()
if stableCameraInstance then return end
stableCameraInstance = StableCamera.new()
end
local function stopNoCameraShake()
if stableCameraInstance then
stableCameraInstance:Destroy()
stableCameraInstance = nil
end
end
-- ==================== FLUENT UI SECTIONS ====================
-- Billboard ESP Section
billboardSection = Tabs.Main:AddSection("Billboard ESP")
NextbotToggle = Tabs.Main:AddToggle("NextbotToggle", {
Title = "Nextbots",
Default = false
})
PlayerToggle = Tabs.Main:AddToggle("PlayerToggle", {
Title = "Players",
Default = false
})
TicketToggle = Tabs.Main:AddToggle("TicketToggle", {
Title = "Tickets",
Default = false
})
-- Tracer ESP Section
tracerSection = Tabs.Main:AddSection("Tracer ESP")
TracerPlayerToggle = Tabs.Main:AddToggle("TracerPlayerToggle", {
Title = "Tracer Players",
Default = false
})
TracerBotToggle = Tabs.Main:AddToggle("TracerBotToggle", {
Title = "Tracer Bots",
Default = false
})
-- Main Modification Section
modificationSection = Tabs.Main:AddSection("Main Modification")
AutoRespawnToggle = Tabs.Main:AddToggle("AutoRespawnToggle", {
Title = "Auto Respawn",
Default = false
})
AutoRespawnTypeDropdown = Tabs.Main:AddDropdown("AutoRespawnTypeDropdown", {
Title = "Auto Respawn Type",
Values = {"Spawnpoint", "Fake Revive"},
Multi = false,
Default = "Spawnpoint",
})
Tabs.Main:AddParagraph({
Title = "",
Content = ""
})
-- New Features Section
AntiAFKToggle = Tabs.Main:AddToggle("AntiAFKToggle", {
Title = "Anti AFK",
Default = false
})
AutoWhistleToggle = Tabs.Main:AddToggle("AutoWhistleToggle", {
Title = "Auto Whistle",
Default = false
})
NoCameraShakeToggle = Tabs.Main:AddToggle("NoCameraShakeToggle", {
Title = "No Camera Shake",
Default = false
})
-- ==================== TOGGLE HANDLERS ====================
-- Billboard ESP Loops
local nextbotLoop
local playerLoop
local ticketLoop
NextbotToggle:OnChanged(function(value)
if value then
if not nextbotLoop then
nextbotLoop = RunService.RenderStepped:Connect(function()
if Options.NextbotToggle.Value then
scanForNextbots()
end
end)
end
else
if nextbotLoop then
nextbotLoop:Disconnect()
nextbotLoop = nil
end
for model, data in pairs(NextbotBillboards) do
if data.hrp then
DestroyBillboardESP("NextbotESP", data.hrp)
end
end
NextbotBillboards = {}
end
end)
PlayerToggle:OnChanged(function(value)
if value then
if not playerLoop then
playerLoop = RunService.RenderStepped:Connect(function()
if Options.PlayerToggle.Value then
scanForPlayers()
end
end)
end
else
if playerLoop then
playerLoop:Disconnect()
playerLoop = nil
end
for player, esp in pairs(PlayerBillboards) do
if player.Character then
DestroyBillboardESP("PlayerESP", player.Character:FindFirstChild("Head") or player.Character:FindFirstChild("HumanoidRootPart"))
end
end
PlayerBillboards = {}
end
end)
TicketToggle:OnChanged(function(value)
if value then
if not ticketLoop then
ticketLoop = RunService.RenderStepped:Connect(function()
if Options.TicketToggle.Value then
scanForTickets()
end
end)
end
else
if ticketLoop then
ticketLoop:Disconnect()
ticketLoop = nil
end
for ticket, esp in pairs(TicketBillboards) do
local part = ticket:IsA("Model") and ticket:FindFirstChild("Head") or ticket
if part then
DestroyBillboardESP("TicketESP", part)
end
end
TicketBillboards = {}
end
end)
-- Tracer ESP Toggle Handlers
TracerPlayerToggle:OnChanged(function(value)
if value then
startPlayerTracers()
else
stopPlayerTracers()
end
end)
TracerBotToggle:OnChanged(function(value)
if value then
startBotTracers()
else
stopBotTracers()
end
end)
-- Auto Respawn Toggle Handlers
AutoRespawnToggle:OnChanged(function(value)
if value then
startAutoRespawn()
else
stopAutoRespawn()
end
end)
AutoRespawnTypeDropdown:OnChanged(function(value)
SelfReviveMethod = value
end)
-- New Features Toggle Handlers
AntiAFKToggle:OnChanged(function(value)
if value then
startAntiAFK()
else
stopAntiAFK()
end
end)
AutoWhistleToggle:OnChanged(function(value)
if value then
startAutoWhistle()
else
stopAutoWhistle()
end
end)
NoCameraShakeToggle:OnChanged(function(value)
if value then
startNoCameraShake()
else
stopNoCameraShake()
end
end)
-- ==================== SAVE MANAGER ====================
local TimerDisplayToggle = Tabs.Main:AddToggle("TimerDisplayToggle", {
Title = "Show Timer",
Default = false
})
local timerDisplayLoop = nil
TimerDisplayToggle:OnChanged(function(state)
if state then
if timerDisplayLoop then return end
timerDisplayLoop = RunService.RenderStepped:Connect(function()
local player = game:GetService("Players").LocalPlayer
local pg = player.PlayerGui
-- Find the timer display in the game's UI
local shared = pg:FindFirstChild("Shared")
local hud = shared and shared:FindFirstChild("HUD")
local overlay = hud and hud:FindFirstChild("Overlay")
local default = overlay and overlay:FindFirstChild("Default")
local ro = default and default:FindFirstChild("RoundOverlay")
local round = ro and ro:FindFirstChild("Round")
local timer = round and round:FindFirstChild("RoundTimer")
if timer then
timer.Visible = true
end
local main = pg:FindFirstChild("MainInterface")
if main then
local container = main:FindFirstChild("TimerContainer")
if container then
container.Visible = true
end
end
end)
else
if timerDisplayLoop then
timerDisplayLoop:Disconnect()
timerDisplayLoop = nil
end
local player = game:GetService("Players").LocalPlayer
local pg = player.PlayerGui
local shared = pg:FindFirstChild("Shared")
local hud = shared and shared:FindFirstChild("HUD")
local overlay = hud and hud:FindFirstChild("Overlay")
local default = overlay and overlay:FindFirstChild("Default")
local ro = default and default:FindFirstChild("RoundOverlay")
local round = ro and ro:FindFirstChild("Round")
local timer = round and round:FindFirstChild("RoundTimer")
if timer then
timer.Visible = false
end
local main = pg:FindFirstChild("MainInterface")
if main then
local container = main:FindFirstChild("TimerContainer")
if container then
container.Visible = false
end
end
end
end)
local billboardSection = Tabs.Main:AddSection("Player Modification")
-- who needs noclip on evade lol it's not even work
FlyToggle = Tabs.Main:AddToggle("FlyToggle", {
Title = "Fly",
Default = false
})
FlySpeedInput = Tabs.Main:AddInput("FlySpeedInput", {
Title = "Fly Speed",
Default = "50",
Placeholder = "Enter speed value",
Numeric = true,
Finished = false,
Callback = function(Value)
if Value and tonumber(Value) then
featureStates.FlySpeed = tonumber(Value)
end
end
})
-- Fly variables
local flying = false
local bodyVelocity = nil
local bodyGyro = nil
local character = LocalPlayer.Character
local humanoid = character and character:FindFirstChild("Humanoid")
local rootPart = character and character:FindFirstChild("HumanoidRootPart")
local UserInputService = game:GetService("UserInputService")
-- Initialize fly speed
featureStates = featureStates or {}
featureStates.FlySpeed = 50
local function startFlying()
if not character or not humanoid or not rootPart then
-- Try to get fresh references
character = LocalPlayer.Character
if not character then return end
humanoid = character:WaitForChild("Humanoid")
rootPart = character:WaitForChild("HumanoidRootPart")
if not humanoid or not rootPart then return end
end
flying = true
bodyVelocity = Instance.new("BodyVelocity")
bodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bodyVelocity.Velocity = Vector3.new(0, 0, 0)
bodyVelocity.Parent = rootPart
bodyGyro = Instance.new("BodyGyro")
bodyGyro.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
bodyGyro.CFrame = rootPart.CFrame
bodyGyro.Parent = rootPart
humanoid.PlatformStand = true
end
local function stopFlying()
flying = false
if bodyVelocity then
bodyVelocity:Destroy()
bodyVelocity = nil
end
if bodyGyro then
bodyGyro:Destroy()
bodyGyro = nil
end
if humanoid then
humanoid.PlatformStand = false
end
end
local function updateFly()
if not flying or not bodyVelocity or not bodyGyro then return end
local camera = workspace.CurrentCamera
local cameraCFrame = camera.CFrame
local direction = Vector3.new(0, 0, 0)
local moveDirection = humanoid.MoveDirection
if moveDirection.Magnitude > 0 then
local forwardVector = cameraCFrame.LookVector
local rightVector = cameraCFrame.RightVector
local forwardComponent = moveDirection:Dot(forwardVector) * forwardVector
local rightComponent = moveDirection:Dot(rightVector) * rightVector
direction = direction + (forwardComponent + rightComponent).Unit * moveDirection.Magnitude
end
if UserInputService:IsKeyDown(Enum.KeyCode.Space) or humanoid.Jump then
direction = direction + Vector3.new(0, 1, 0)
end
if UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) then
direction = direction - Vector3.new(0, 1, 0)
end
local speed = featureStates.FlySpeed or 50
bodyVelocity.Velocity = direction.Magnitude > 0 and direction.Unit * (speed * 2) or Vector3.new(0, 0, 0)
bodyGyro.CFrame = cameraCFrame
end
-- Fly loop connection
local flyLoop = nil
-- Character changed event to update references
local characterAddedConnection = nil
FlyToggle:OnChanged(function(state)
if state then
-- Set up character tracking
if characterAddedConnection then
characterAddedConnection:Disconnect()
end
characterAddedConnection = LocalPlayer.CharacterAdded:Connect(function(newChar)
character = newChar
task.wait(0.5)
humanoid = character:WaitForChild("Humanoid")
rootPart = character:WaitForChild("HumanoidRootPart")
-- Restart flying if it was enabled
if Options.FlyToggle.Value and flying == false then
startFlying()
end
end)
-- Get current character
character = LocalPlayer.Character
if character then
humanoid = character:FindFirstChild("Humanoid")
rootPart = character:FindFirstChild("HumanoidRootPart")
end
startFlying()
-- Start update loop
if not flyLoop then
flyLoop = RunService.RenderStepped:Connect(function()
if Options.FlyToggle.Value then
updateFly()
end
end)
end
else
stopFlying()
if flyLoop then
flyLoop:Disconnect()
flyLoop = nil
end
if characterAddedConnection then
characterAddedConnection:Disconnect()
characterAddedConnection = nil
end
end
end)
-- Make sure to disconnect everything when script ends
game:GetService("Players").LocalPlayer.CharacterRemoving:Connect(function()
if Options.FlyToggle.Value then
stopFlying()
if flyLoop then
flyLoop:Disconnect()
flyLoop = nil
end
end
end)
Tabs.Main:AddParagraph({
Title = "Manual",
Content = ""
})
function manualRevive()
local player = game:GetService("Players").LocalPlayer
local character = player.Character
if not character then return end
local hrp = character:FindFirstChild("HumanoidRootPart")
local isDowned = character:GetAttribute("Downed")
if not isDowned then
return
end
local SelfReviveMethod = Options.AutoRespawnTypeDropdown and Options.AutoRespawnTypeDropdown.Value or "Spawnpoint"
if SelfReviveMethod == "Spawnpoint" then
pcall(function()
ReplicatedStorage.Events.Player.ChangePlayerMode:FireServer(true)
end)
elseif SelfReviveMethod == "Fake Revive" then
local lastSavedPosition = hrp and hrp.Position
if hrp then
lastSavedPosition = hrp.Position
end
task.spawn(function()
task.wait(3)
local startTime = tick()
repeat
pcall(function()
ReplicatedStorage:WaitForChild("Events"):WaitForChild("Player"):WaitForChild("ChangePlayerMode"):FireServer(true)
end)
task.wait(1)
until not character:GetAttribute("Downed") or (tick() - startTime > 1)
local newCharacter
repeat
newCharacter = player.Character
task.wait()
until newCharacter and newCharacter:FindFirstChild("HumanoidRootPart")
local newHRP = newCharacter:FindFirstChild("HumanoidRootPart")
if lastSavedPosition and newHRP then
newHRP.CFrame = CFrame.new(lastSavedPosition)
task.wait(0.5)
local movedDistance = (newHRP.Position - lastSavedPosition).Magnitude
if movedDistance > 1 then
lastSavedPosition = nil
end
end
end)
end
end
RespawnButton = Tabs.Main:AddButton({
Title = "Respawn Button",
Callback = function()
local CoreGui = game:GetService("CoreGui")
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local existingScreenGui = CoreGui:FindFirstChild("DraconicRespawnButtonGUI")
if existingScreenGui then
existingScreenGui:Destroy()
else
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "DraconicRespawnButtonGUI"
screenGui.ResetOnSpawn = false
screenGui.Parent = CoreGui
local function createGradientButton(parent, position, size, text)
local button = Instance.new("Frame")
button.Name = "GradientBtn"
button.BackgroundTransparency = 0.7
button.Size = size
button.Position = position
button.Draggable = true
button.Active = true
button.Selectable = true
button.Parent = parent
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(1, 0)
corner.Parent = button
local gradient = Instance.new("UIGradient")
gradient.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 0, 0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(0, 0, 0))
}
gradient.Rotation = 45
gradient.Parent = button
local stroke = Instance.new("UIStroke")
stroke.Color = Color3.fromRGB(120, 0, 0)
stroke.Thickness = 2
stroke.Parent = button
local label = Instance.new("TextLabel")
label.Text = text
label.Size = UDim2.new(1, 0, 1, 0)
label.BackgroundTransparency = 1
label.TextColor3 = Color3.fromRGB(255, 255, 255)
label.TextSize = 30
label.Font = Enum.Font.GothamMedium
label.Parent = button
local clicker = Instance.new("TextButton")
clicker.Size = UDim2.new(1, 0, 1, 0)
clicker.BackgroundTransparency = 1
clicker.Text = ""
clicker.ZIndex = 5
clicker.Active = false
clicker.Selectable = false
clicker.Parent = button
clicker.MouseButton1Click:Connect(function()
manualRevive()
end)
clicker.MouseEnter:Connect(function()
stroke.Color = Color3.fromRGB(160, 0, 0)
end)
clicker.MouseLeave:Connect(function()
stroke.Color = Color3.fromRGB(120, 0, 0)
end)
return button, clicker, stroke
end
local buttonSize = 200
if Options.RespawnButtonSizeInput and Options.RespawnButtonSizeInput.Value and tonumber(Options.RespawnButtonSizeInput.Value) then
buttonSize = tonumber(Options.RespawnButtonSizeInput.Value)
end
local btnWidth = math.max(150, math.min(buttonSize, 400))
local btnHeight = math.max(60, math.min(buttonSize * 0.4, 160))
local btn, clicker, stroke = createGradientButton(
screenGui,
UDim2.new(0.5, -btnWidth/2, 0.5, -btnHeight/2),
UDim2.new(0, btnWidth, 0, btnHeight),
"RESPAWN"
)
end
end
})
RespawnButtonSizeInput = Tabs.Main:AddInput("RespawnButtonSizeInput", {
Title = "Button Size",
Default = "200",
Placeholder = "Enter size (150-400)",
Numeric = true,
Finished = false,
Callback = function(Value)
if Value and tonumber(Value) then
local size = tonumber(Value)
local CoreGui = game:GetService("CoreGui")
local existingScreenGui = CoreGui:FindFirstChild("DraconicRespawnButtonGUI")
if existingScreenGui then
local button = existingScreenGui:FindFirstChild("GradientBtn")
if button then
local newWidth = math.max(150, math.min(size, 400))
local newHeight = math.max(60, math.min(size * 0.4, 160))
button.Size = UDim2.new(0, newWidth, 0, newHeight)
end
end
end
end
})
LeaderboardToggle = Tabs.Main:AddButton({
Title = "Open Leaderboard",
Callback = function()
local playerScripts = game:GetService("Players").LocalPlayer.PlayerScripts
local ohTable1 = {
["Down"] = true,
["Key"] = "Leaderboard"
}
playerScripts.Events.temporary_events.UseKeybind:Fire(ohTable1)
task.wait(0.1)
local ohTable2 = {
["Down"] = false,
["Key"] = "Leaderboard"
}
playerScripts.Events.temporary_events.UseKeybind:Fire(ohTable2)
end
})
if not workspace:FindFirstChild("SecurityPart") then
local SecurityPart = Instance.new("Part")
SecurityPart.Name = "SecurityPart"
SecurityPart.Size = Vector3.new(10, 1, 10)
SecurityPart.Position = Vector3.new(5000, 5000, 5000)
SecurityPart.Anchored = true
SecurityPart.CanCollide = true
SecurityPart.Parent = workspace
end
local AutoTab = Window:AddTab({ Title = "Auto Farm", Icon = "clock" })
AutoTab:AddSection("Farmings")
AutoMoneyFarmToggle = AutoTab:AddToggle("AutoMoneyFarmToggle", {
Title = "Auto Farm Money",
Default = false
})
AutoTicketFarmToggle = AutoTab:AddToggle("AutoTicketFarmToggle", {
Title = "Auto Farm Tickets",
Default = false
})
AFKFarmToggle = AutoTab:AddToggle("AFKFarmToggle", {
Title = "AFK Farm",
Default = false
})
AutoTab:AddParagraph({
Title = "Teleports",
})
TeleportObjectiveButton = AutoTab:AddButton({
Title = "Teleport to Objective",
Callback = function()
local objectives = {}
local gameFolder = workspace:FindFirstChild("Game")
if not gameFolder then return end
local mapFolder = gameFolder:FindFirstChild("Map")
if not mapFolder then return end
local partsFolder = mapFolder:FindFirstChild("Parts")
if not partsFolder then return end
local objectivesFolder = partsFolder:FindFirstChild("Objectives")
if not objectivesFolder then return end
for _, obj in pairs(objectivesFolder:GetChildren()) do
if obj:IsA("Model") then
local primaryPart = obj.PrimaryPart
if not primaryPart then
for _, part in pairs(obj:GetChildren()) do
if part:IsA("BasePart") then
primaryPart = part
break
end
end
end
if primaryPart then
table.insert(objectives, {
Name = obj.Name,
Part = primaryPart,
Position = primaryPart.Position,
Size = primaryPart.Size
})
end
end
end
if #objectives == 0 then
return
end
local selectedObjective = objectives[math.random(1, #objectives)]
local character = LocalPlayer.Character
if not character then return end
local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")
if not humanoidRootPart then return end
local teleportPosition = selectedObjective.Position + Vector3.new(0, 5, 0)
local raycastParams = RaycastParams.new()
raycastParams.FilterDescendantsInstances = {character}
raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
local ray = workspace:Raycast(teleportPosition, Vector3.new(0, -10, 0), raycastParams)
if ray then
teleportPosition = ray.Position + Vector3.new(0, 3, 0)
end
humanoidRootPart.CFrame = CFrame.new(teleportPosition)
end
})
AutoMoneyFarmConnection = nil
AutoWinConnection = nil
AutoTicketFarmConnection = nil
AutoReviveModule = nil
character = LocalPlayer.Character
humanoid = character and character:FindFirstChild("Humanoid")
rootPart = character and character:FindFirstChild("HumanoidRootPart")
function startAutoWin()
if AutoWinConnection then return end
AutoWinConnection = RunService.Heartbeat:Connect(function()
local securityPart = workspace:FindFirstChild("SecurityPart")
if not securityPart then return end
local currentCharacter = LocalPlayer.Character
if not currentCharacter then return end
local currentRootPart = currentCharacter:FindFirstChild("HumanoidRootPart")
if not currentRootPart then return end
if not currentCharacter:GetAttribute("Downed") then
currentRootPart.CFrame = securityPart.CFrame + Vector3.new(0, 3, 0)
end
end)
end
function stopAutoWin()
if AutoWinConnection then
AutoWinConnection:Disconnect()
AutoWinConnection = nil
end
end
function initAutoReviveModule()
local reviveRange = 10
local loopDelay = 0.15
local autoReviveEnabled = false
local reviveLoopHandle = nil
local interactEvent = ReplicatedStorage:WaitForChild("Events"):WaitForChild("Character"):WaitForChild("Interact")
function isPlayerDowned(pl)
if not pl or not pl.Character then return false end
local char = pl.Character
local humanoid = char:FindFirstChild("Humanoid")
if humanoid and humanoid.Health <= 0 then
return true
end
if char.GetAttribute and char:GetAttribute("Downed") == true then
return true
end
return false
end
function startAutoRevive()
if reviveLoopHandle then return end
reviveLoopHandle = task.spawn(function()
while autoReviveEnabled do
local currentPlayer = Players.LocalPlayer
if currentPlayer and currentPlayer.Character and currentPlayer.Character:FindFirstChild("HumanoidRootPart") then
local myHRP = currentPlayer.Character.HumanoidRootPart
for _, pl in ipairs(Players:GetPlayers()) do
if pl ~= currentPlayer then
local char = pl.Character
if char and char:FindFirstChild("HumanoidRootPart") then
if isPlayerDowned(pl) then
local hrp = char.HumanoidRootPart
local success, dist = pcall(function()
return (myHRP.Position - hrp.Position).Magnitude
end)
if success and dist and dist <= reviveRange then
pcall(function()
interactEvent:FireServer("Revive", true, pl.Name)
end)
end
end
end
end
end
end
task.wait(loopDelay)
end
reviveLoopHandle = nil
end)
end
function stopAutoRevive()
autoReviveEnabled = false
end
function ToggleAutoRevive(state)
if state == nil then
autoReviveEnabled = not autoReviveEnabled
else
autoReviveEnabled = (state == true)
end
if autoReviveEnabled then
startAutoRevive()
else
stopAutoRevive()
end
end
function SetReviveRange(range)
if type(range) == "number" and range > 0 then
reviveRange = range
end
end
return {
Toggle = ToggleAutoRevive,
Start = function() ToggleAutoRevive(true) end,
Stop = function() ToggleAutoRevive(false) end,
SetRange = SetReviveRange,
IsEnabled = function() return autoReviveEnabled end,
}
end
function startAutoMoneyFarm()
if AutoMoneyFarmConnection then return end
if not AutoReviveModule then
AutoReviveModule = initAutoReviveModule()
end
AutoReviveModule.Start()
AutoMoneyFarmConnection = RunService.Heartbeat:Connect(function()
local securityPart = workspace:FindFirstChild("SecurityPart")
if not securityPart then return end
local currentCharacter = LocalPlayer.Character
if not currentCharacter then return end
local currentRootPart = currentCharacter:FindFirstChild("HumanoidRootPart")
if not currentRootPart then return end
local downedPlayerFound = false
local playersInGame = workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Players")
if playersInGame then
for _, v in pairs(playersInGame:GetChildren()) do
if v:IsA("Model") and v:GetAttribute("Downed") then
if v:FindFirstChild("RagdollConstraints") then
continue
end
local vHrp = v:FindFirstChild("HumanoidRootPart")
if vHrp then
currentRootPart.CFrame = vHrp.CFrame + Vector3.new(0, 3, 0)
pcall(function()
ReplicatedStorage.Events.Character.Interact:FireServer("Revive", true, v)
end)
task.wait(0.5)
downedPlayerFound = true
break
end
end
end
end
if not downedPlayerFound then
currentRootPart.CFrame = securityPart.CFrame + Vector3.new(0, 3, 0)
end
end)
end
function stopAutoMoneyFarm()
if AutoMoneyFarmConnection then
AutoMoneyFarmConnection:Disconnect()
AutoMoneyFarmConnection = nil
end
if AutoReviveModule then
AutoReviveModule.Stop()
end
end
AutoMoneyFarmToggle:OnChanged(function(state)
if state then
startAutoMoneyFarm()
else
stopAutoMoneyFarm()
end
end)
AFKFarmToggle:OnChanged(function(state)
if state then
startAutoWin()
else
stopAutoWin()
end
end)
AutoTicketFarmToggle:OnChanged(function(state)
local yOffset = 15
local currentTicket = nil
local ticketProcessedTime = 0
if state then
local securityPart = workspace:FindFirstChild("SecurityPart")
if not securityPart then
return
end
if AutoTicketFarmConnection then
AutoTicketFarmConnection:Disconnect()
end
AutoTicketFarmConnection = RunService.Heartbeat:Connect(function()
local character = LocalPlayer.Character
if not character then return end
local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")
if not humanoidRootPart then return end
local tickets = workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Effects") and workspace.Game.Effects:FindFirstChild("Tickets")
if character:GetAttribute("Downed") then
pcall(function()
ReplicatedStorage.Events.Player.ChangePlayerMode:FireServer(true)
end)
humanoidRootPart.CFrame = securityPart.CFrame + Vector3.new(0, 3, 0)
return
end
if tickets then
local activeTickets = tickets:GetChildren()
if #activeTickets > 0 then
if not currentTicket or not currentTicket.Parent then
currentTicket = activeTickets[1]
ticketProcessedTime = tick()
end
if currentTicket and currentTicket.Parent then
local ticketPart = currentTicket:FindFirstChild("HumanoidRootPart") or currentTicket:IsA("BasePart") and currentTicket
if ticketPart then
local targetPosition = ticketPart.Position + Vector3.new(0, yOffset, 0)
humanoidRootPart.CFrame = CFrame.new(targetPosition)
if tick() - ticketProcessedTime > 0.1 then
humanoidRootPart.CFrame = ticketPart.CFrame
end
else
currentTicket = nil
end
else
humanoidRootPart.CFrame = securityPart.CFrame + Vector3.new(0, 3, 0)
currentTicket = nil
end
else
humanoidRootPart.CFrame = securityPart.CFrame + Vector3.new(0, 3, 0)
currentTicket = nil
end
else
humanoidRootPart.CFrame = securityPart.CFrame + Vector3.new(0, 3, 0)
currentTicket = nil
end
end)
else
if AutoTicketFarmConnection then
AutoTicketFarmConnection:Disconnect()
AutoTicketFarmConnection = nil
end
currentTicket = nil
local character = LocalPlayer.Character
if character then
local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")
local securityPart = workspace:FindFirstChild("SecurityPart")
if humanoidRootPart and securityPart then
humanoidRootPart.CFrame = securityPart.CFrame + Vector3.new(0, 3, 0)
end
end
end
end)
CombatTab = Window:AddTab({ Title = "Combat", Icon = "swords" })
CombatTab:AddSection("Anti-Nextbot")
featureStates.AntiNextbot = false
featureStates.AntiNextbotTeleportType = "Distance"
featureStates.AntiNextbotDistance = 50
featureStates.DistanceTeleport = 20
PathfindingService = game:GetService("PathfindingService")
antiNextbotConnection = nil
farmsSuppressedByAntiNextbot = false
previousMoneyFarm = false
previousTicketFarm = false
previousAutoWin = false
function handleAntiNextbot()
if not featureStates.AntiNextbot then return end
character = Players.LocalPlayer.Character
humanoidRootPart = character and character:FindFirstChild("HumanoidRootPart")
if not humanoidRootPart then return end
nextbots = {}
npcsFolder = workspace:FindFirstChild("NPCs")
if npcsFolder then
for _, model in ipairs(npcsFolder:GetChildren()) do
if model:IsA("Model") and isNextbotModel(model) then
hrp = model:FindFirstChild("HumanoidRootPart")
if hrp then
table.insert(nextbots, model)
end
end
end
end
playersFolder = workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Players")
if playersFolder then
for _, model in ipairs(playersFolder:GetChildren()) do
if model:IsA("Model") and isNextbotModel(model) then
hrp = model:FindFirstChild("HumanoidRootPart")
if hrp then
table.insert(nextbots, model)
end
end
end
end
for _, nextbot in ipairs(nextbots) do
nextbotHrp = nextbot:FindFirstChild("HumanoidRootPart")
if nextbotHrp then
distance = (humanoidRootPart.Position - nextbotHrp.Position).Magnitude
if distance <= featureStates.AntiNextbotDistance then
if featureStates.AntiNextbotTeleportType == "Players" then
validPlayers = {}
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= player and plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") then
table.insert(validPlayers, plr)
end
end
if #validPlayers > 0 then
randomPlayer = validPlayers[math.random(1, #validPlayers)]
humanoidRootPart.CFrame = randomPlayer.Character.HumanoidRootPart.CFrame + Vector3.new(0, 3, 0)
end
elseif featureStates.AntiNextbotTeleportType == "Spawn" then
spawnsFolder = workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Map") and workspace.Game.Map:FindFirstChild("Parts") and workspace.Game.Map.Parts:FindFirstChild("Spawns")
if spawnsFolder then
spawnLocations = spawnsFolder:GetChildren()
if #spawnLocations > 0 then
randomSpawn = spawnLocations[math.random(1, #spawnLocations)]
humanoidRootPart.CFrame = randomSpawn.CFrame + Vector3.new(0, 3, 0)
end
end
elseif featureStates.AntiNextbotTeleportType == "Distance" then
direction = (humanoidRootPart.Position - nextbotHrp.Position).Unit
targetPos = humanoidRootPart.Position + direction * featureStates.DistanceTeleport
path = PathfindingService:CreatePath({
AgentRadius = 2,
AgentHeight = 5,
AgentCanJump = true
})
success, errorMessage = pcall(function()
path:ComputeAsync(humanoidRootPart.Position, targetPos)
end)
if success and path.Status == Enum.PathStatus.Success then
waypoints = path:GetWaypoints()
if #waypoints > 1 then
lastValidPos = waypoints[#waypoints].Position
distanceToTarget = (lastValidPos - humanoidRootPart.Position).Magnitude
if distanceToTarget <= featureStates.DistanceTeleport then
humanoidRootPart.CFrame = CFrame.new(lastValidPos + Vector3.new(0, 3, 0))
else
for i = #waypoints, 1, -1 do
waypointPos = waypoints[i].Position
if (waypointPos - humanoidRootPart.Position).Magnitude <= featureStates.DistanceTeleport then
humanoidRootPart.CFrame = CFrame.new(waypointPos + Vector3.new(0, 3, 0))
break
end
end
end
end
else
fallbackPos = humanoidRootPart.Position + direction * featureStates.DistanceTeleport
ray = Ray.new(humanoidRootPart.Position, direction * featureStates.DistanceTeleport)
hit, hitPos = workspace:FindPartOnRayWithIgnoreList(ray, {character, nextbot})
if not hit then
humanoidRootPart.CFrame = CFrame.new(fallbackPos + Vector3.new(0, 3, 0))
else
humanoidRootPart.CFrame = CFrame.new(hitPos + Vector3.new(0, 3, 0))
end
end
end
break
end
end
end
end
task.spawn(function()
while true do
if featureStates.AntiNextbot then
pcall(handleAntiNextbot)
end
task.wait(0.1)
end
end)
AntiNextbotToggle = CombatTab:AddToggle("AntiNextbotToggle", {
Title = "Anti-Nextbot",
Default = false
})
AntiNextbotTeleportTypeDropdown = CombatTab:AddDropdown("AntiNextbotTeleportTypeDropdown", {
Title = "Teleport Type",
Values = {"Players", "Spawn", "Distance"},
Multi = false,
Default = "Distance"
})
AntiNextbotDistanceInput = CombatTab:AddInput("AntiNextbotDistanceInput", {
Title = "Detection Distance",
Default = "50",
Placeholder = "Enter distance",
Numeric = true,
Finished = false
})
DistanceTeleportInput = CombatTab:AddInput("DistanceTeleportInput", {
Title = "Teleport Distance",
Default = "20",
Placeholder = "Enter distance",
Numeric = true,
Finished = false
})
AntiNextbotToggle:OnChanged(function(state)
featureStates.AntiNextbot = state
if state then
antiNextbotConnection = RunService.Heartbeat:Connect(function()
if not featureStates.AntiNextbot then return end
character = player.Character
humanoidRootPart = character and character:FindFirstChild("HumanoidRootPart")
if not humanoidRootPart then return end
nearestDistance = math.huge
nearestNextbot = nil
playersFolder = workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Players")
npcsFolder = workspace:FindFirstChild("NPCs")
if playersFolder then
for _, model in pairs(playersFolder:GetChildren()) do
if model:IsA("Model") and model:FindFirstChild("HumanoidRootPart") and isNextbotModel(model) then
dist = (model.HumanoidRootPart.Position - humanoidRootPart.Position).Magnitude
if dist < nearestDistance then
nearestDistance = dist
nearestNextbot = model
end
end
end
end
if npcsFolder then
for _, model in pairs(npcsFolder:GetChildren()) do
if model:IsA("Model") and model:FindFirstChild("HumanoidRootPart") and isNextbotModel(model) then
dist = (model.HumanoidRootPart.Position - humanoidRootPart.Position).Magnitude
if dist < nearestDistance then
nearestDistance = dist
nearestNextbot = model
end
end
end
end
threshold = featureStates.AntiNextbotDistance
isTooClose = (nearestDistance < threshold)
if isTooClose and not farmsSuppressedByAntiNextbot then
previousMoneyFarm = Options.AutoMoneyFarmToggle.Value
previousTicketFarm = Options.AutoTicketFarmToggle.Value
previousAutoWin = Options.AFKFarmToggle.Value
if Options.AutoMoneyFarmToggle.Value then
Options.AutoMoneyFarmToggle:Set(false)
end
if Options.AutoTicketFarmToggle.Value then
Options.AutoTicketFarmToggle:Set(false)
end
if Options.AFKFarmToggle.Value then
Options.AFKFarmToggle:Set(false)
end
farmsSuppressedByAntiNextbot = true
elseif not isTooClose and farmsSuppressedByAntiNextbot then
if previousMoneyFarm then
Options.AutoMoneyFarmToggle:Set(true)
end
if previousTicketFarm then
Options.AutoTicketFarmToggle:Set(true)
end
if previousAutoWin then
Options.AFKFarmToggle:Set(true)
end
farmsSuppressedByAntiNextbot = false
end
if isTooClose then
safePart = workspace:FindFirstChild("SecurityPart")
if safePart then
humanoidRootPart.CFrame = safePart.CFrame + Vector3.new(math.random(-5, 5), 3, math.random(-5, 5))
end
end
end)
else
if antiNextbotConnection then
antiNextbotConnection:Disconnect()
antiNextbotConnection = nil
end
if farmsSuppressedByAntiNextbot then
if previousMoneyFarm then
Options.AutoMoneyFarmToggle:Set(true)
end
if previousTicketFarm then
Options.AutoTicketFarmToggle:Set(true)
end
if previousAutoWin then
Options.AFKFarmToggle:Set(true)
end
farmsSuppressedByAntiNextbot = false
end
end
end)
AntiNextbotTeleportTypeDropdown:OnChanged(function(value)
featureStates.AntiNextbotTeleportType = value
end)
AntiNextbotDistanceInput:OnChanged(function(value)
num = tonumber(value)
if num and num > 0 then
featureStates.AntiNextbotDistance = num
end
end)
DistanceTeleportInput:OnChanged(function(value)
num = tonumber(value)
if num and num > 0 then
featureStates.DistanceTeleport = num
end
end)
MiscTab = Window:AddTab({ Title = "Misc", Icon = "star" })
MiscTab:AddSection("Player Adjustments")
local currentSettings = {
Speed = "1500",
JumpCap = "1",
AirStrafeAcceleration = "187"
}
local appliedOnce = false
local playerModelPresent = false
local gameStatsPath = workspace:WaitForChild("Game"):WaitForChild("Stats")
getgenv().ApplyMode = "Not Optimized"
local requiredFields = {
Friction = true,
AirStrafeAcceleration = true,
JumpHeight = true,
RunDeaccel = true,
JumpSpeedMultiplier = true,
JumpCap = true,
SprintCap = true,
WalkSpeedMultiplier = true,
BhopEnabled = true,
Speed = true,
AirAcceleration = true,
RunAccel = true,
SprintAcceleration = true
}
local function hasAllFields(tbl)
if type(tbl) ~= "table" then return false end
for field, _ in pairs(requiredFields) do
if rawget(tbl, field) == nil then return false end
end
return true
end
local function getConfigTables()
local tables = {}
for _, obj in ipairs(getgc(true)) do
local success, result = pcall(function()
if hasAllFields(obj) then return obj end
end)
if success and result then
table.insert(tables, result)
end
end
return tables
end
local function applyToTables(callback)
local targets = getConfigTables()
if #targets == 0 then return end
if getgenv().ApplyMode == "Optimized" then
task.spawn(function()
for i, tableObj in ipairs(targets) do
if tableObj and typeof(tableObj) == "table" then
pcall(callback, tableObj)
end
if i % 3 == 0 then
task.wait()
end
end
end)
else
for i, tableObj in ipairs(targets) do
if tableObj and typeof(tableObj) == "table" then
pcall(callback, tableObj)
end
end
end
end
local function applyStoredSettings()
local settings = {
{field = "Speed", value = tonumber(currentSettings.Speed)},
{field = "JumpCap", value = tonumber(currentSettings.JumpCap)},
{field = "AirStrafeAcceleration", value = tonumber(currentSettings.AirStrafeAcceleration)}
}
for _, setting in ipairs(settings) do
if setting.value and tostring(setting.value) ~= "1500" and tostring(setting.value) ~= "1" and tostring(setting.value) ~= "187" then
applyToTables(function(obj)
obj[setting.field] = setting.value
end)
end
end
end
local function applySettingsWithDelay()
if not playerModelPresent or appliedOnce then
return
end
appliedOnce = true
local settings = {
{field = "Speed", value = tonumber(currentSettings.Speed), delay = math.random(1, 14)},
{field = "JumpCap", value = tonumber(currentSettings.JumpCap), delay = math.random(1, 14)},
{field = "AirStrafeAcceleration", value = tonumber(currentSettings.AirStrafeAcceleration), delay = math.random(1, 14)}
}
for _, setting in ipairs(settings) do
if setting.value and tostring(setting.value) ~= "1500" and tostring(setting.value) ~= "1" and tostring(setting.value) ~= "187" then
task.spawn(function()
task.wait(setting.delay)
applyToTables(function(obj)
obj[setting.field] = setting.value
end)
end)
end
end
end
local function isPlayerModelPresent()
local GameFolder = workspace:FindFirstChild("Game")
local PlayersFolder = GameFolder and GameFolder:FindFirstChild("Players")
return PlayersFolder and PlayersFolder:FindFirstChild(player.Name) ~= nil
end
SpeedInput = MiscTab:AddInput("SpeedInput", {
Title = "Player Speed",
Default = currentSettings.Speed,
Placeholder = "Default 1500",
Numeric = true,
Finished = false,
Callback = function(Value)
local val = tonumber(Value)
if val and val >= 1450 and val <= 100008888 then
currentSettings.Speed = tostring(val)
applyToTables(function(obj)
obj.Speed = val
end)
end
end
})
JumpPowerInput = MiscTab:AddInput("JumpPowerInput", {
Title = "Player Jump",
Default = "3",
Placeholder = "",
Numeric = true,
Finished = true,
Callback = function(Value)
if Value and tonumber(Value) then
JumpPowerValue = tonumber(Value)
end
end
})
JumpCapInput = MiscTab:AddInput("JumpCapInput", {
Title = "Player Jump Cap",
Default = currentSettings.JumpCap,
Placeholder = "Default 1",
Numeric = true,
Finished = false,
Callback = function(Value)
local val = tonumber(Value)
if val and val >= 0.1 and val <= 5088888 then
currentSettings.JumpCap = tostring(val)
applyToTables(function(obj)
obj.JumpCap = val
end)
end
end
})
StrafeInput = MiscTab:AddInput("StrafeInput", {
Title = "Player Strafe Acceleration",
Default = currentSettings.AirStrafeAcceleration,
Placeholder = "Default 187",
Numeric = true,
Finished = false,
Callback = function(Value)
local val = tonumber(Value)
if val and val >= 1 and val <= 1000888888 then
currentSettings.AirStrafeAcceleration = tostring(val)
applyToTables(function(obj)
obj.AirStrafeAcceleration = val
end)
end
end
})
ApplyMethodDropdown = MiscTab:AddDropdown("ApplyMethodDropdown", {
Title = "Select Apply Method",
Values = {"Not Optimized", "Optimized"},
Multi = false,
Default = getgenv().ApplyMode,
Callback = function(Value)
getgenv().ApplyMode = Value
end
})
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ChangeSettingRemote = ReplicatedStorage:WaitForChild("Events"):WaitForChild("Data"):WaitForChild("ChangeSetting")
local UpdatedEvent = ReplicatedStorage:WaitForChild("Modules"):WaitForChild("Client"):WaitForChild("Settings"):WaitForChild("Updated")
FovInput = MiscTab:AddInput("FovInput", {
Title = "Player FOV",
Default = "",
Numeric = true,
Finished = false,
Callback = function(Value)
local num = tonumber(Value)
if num then
ChangeSettingRemote:InvokeServer(2, num)
UpdatedEvent:Fire(2, num)
end
end
})
JumpPowerValue = 3
MaxJumpsValue = math.huge
CurrentJumpCount = 0
JumpHumanoid = nil
JumpRootPart = nil
Players.LocalPlayer.CharacterAdded:Connect(function(newChar)
task.wait(0.5)
JumpHumanoid = newChar:FindFirstChild("Humanoid")
JumpRootPart = newChar:FindFirstChild("HumanoidRootPart")
if JumpHumanoid and JumpRootPart then
CurrentJumpCount = 0
JumpHumanoid.StateChanged:Connect(function(oldState, newState)
if newState == Enum.HumanoidStateType.Landed then
CurrentJumpCount = 0
end
end)
JumpHumanoid.Jumping:Connect(function(isJumping)
if isJumping and CurrentJumpCount < MaxJumpsValue then
CurrentJumpCount = CurrentJumpCount + 1
JumpHumanoid.JumpHeight = JumpPowerValue
if CurrentJumpCount > 1 and JumpRootPart then
JumpRootPart:ApplyImpulse(Vector3.new(0, JumpPowerValue * JumpRootPart.Mass, 0))
end
end
end)
end
end)
-- Handle initial character
if Players.LocalPlayer.Character then
task.spawn(function()
task.wait(0.5)
JumpHumanoid = Players.LocalPlayer.Character:FindFirstChild("Humanoid")
JumpRootPart = Players.LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if JumpHumanoid and JumpRootPart then
CurrentJumpCount = 0
JumpHumanoid.StateChanged:Connect(function(oldState, newState)
if newState == Enum.HumanoidStateType.Landed then
CurrentJumpCount = 0
end
end)
JumpHumanoid.Jumping:Connect(function(isJumping)
if isJumping and CurrentJumpCount < MaxJumpsValue then
CurrentJumpCount = CurrentJumpCount + 1
JumpHumanoid.JumpHeight = JumpPowerValue
if CurrentJumpCount > 1 and JumpRootPart then
JumpRootPart:ApplyImpulse(Vector3.new(0, JumpPowerValue * JumpRootPart.Mass, 0))
end
end
end)
end
end)
end
LocalPlayer.CharacterAdded:Connect(function(newChar)
character = newChar
task.wait(0.5)
humanoid = character:WaitForChild("Humanoid")
rootPart = character:WaitForChild("HumanoidRootPart")
end)
MiscTab:AddParagraph({
Title = "",
Content = ""
})
--====FAILED TO DECOMPILED CODE====--
JumpPowerToggle = MiscTab:AddToggle("JumpPowerToggle", {
Title = "Jump Power Toggle",
Default = false
})
JumpPowerToggle:OnChanged(function()
--====FAILED TO EXECUTE FUNCTION====--
end)
--====FAILED TO DECOMPILED CODE====--
PlayerJumpPowerInput = MiscTab:AddInput("PlayerJumpPowerInput", {
Title = "Player Jump Power",
Default = "Failed To Decode",
Placeholder = "Failed To Decode",
Numeric = true,
Finished = false,
Callback = function(Value)
--====FAILED TO EXECUTE CALLBACK====--
end
})
--====FAILED TO DECOMPILED CODE====--
WalkspeedToggle = MiscTab:AddToggle("WalkspeedToggle", {
Title = "Walkspeed Toggle",
Default = false
})
WalkspeedToggle:OnChanged(function()
--====FAILED TO EXECUTE FUNCTION====--
end)
--====FAILED TO DECOMPILED CODE====--
PlayerWalkspeedInput = MiscTab:AddInput("PlayerWalkspeedInput", {
Title = "Player Walkspeed",
Default = "Failed To Decode",
Placeholder = "Failed To Decode",
Numeric = true,
Finished = false,
Callback = function(Value)
--====FAILED TO EXECUTE CALLBACK====--
end
})
--====FAILED TO DECOMPILED CODE====--
BounceToggle = MiscTab:AddToggle("WalkspeedToggle", {
Title = "Walkspeed Toggle",
Default = false
})
BounceToggle:OnChanged(function()
--====FAILED TO EXECUTE FUNCTION====--
end)
--====FAILED TO DECOMPILED CODE====--
BounceInput = MiscTab:AddInput("BounceInput", {
Title = "Player Walkspeed",
Default = "Failed To Decode",
Placeholder = "Failed To Decode",
Numeric = true,
Finished = false,
Callback = function(Value)
--====FAILED TO EXECUTE CALLBACK====--
end
})
MiscTab:AddParagraph({
Title = "",
Content = ""
})
BounceToggle = MiscTab:AddToggle("BounceToggle", {
Title = "Modify Bounce",
Default = false
--[[ FAILED TO DECOMPILE FUNCTION]]
})
BounceInput = MiscTab:AddInput("BounceInput", {
Title = "Player Bounce",
Default = "80",
Placeholder = "Failed to Decode",
Numeric = true,
Finished = false
})
MiscTab:AddSection("Game Automations")
local InstantReviveToggle = MiscTab:AddToggle("InstantReviveToggle", {
Title = "Instant Revive",
Default = false
})
local ReviveWhileEmoteToggle = MiscTab:AddToggle("ReviveWhileEmoteToggle", {
Title = "Instant Revive While Emoting",
Default = false
})
local ReviveDelaySlider = MiscTab:AddSlider("ReviveDelaySlider", {
Title = "Revive Delay",
Min = 0,
Max = 1,
Default = 0.15,
Rounding = 2,
Callback = function(value)
getgenv().InstantReviveDelay = value
end
})
getgenv().InstantReviveDelay = 0.15
local InstantReviveModule = (function()
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LocalPlayer = Players.LocalPlayer
local reviveRange = 10
local loopDelay = getgenv().InstantReviveDelay or 0.15
local enabled = false
local handle = nil
local stateConnection = nil
local isCurrentlyEmoting = false
local interactEvent = ReplicatedStorage:WaitForChild("Events"):WaitForChild("Character"):WaitForChild("Interact")
local function updateEmoteStatus()
if not LocalPlayer.Character then
isCurrentlyEmoting = false
return
end
local state = LocalPlayer.Character:GetAttribute("State")
isCurrentlyEmoting = state and string.find(state, "Emoting")
end
local function isPlayerDowned(pl)
if not pl or not pl.Character then return false end
local char = pl.Character
if char:GetAttribute("Downed") then return true end
local hum = char:FindFirstChild("Humanoid")
if hum and hum.Health <= 0 then return true end
return false
end
local function reviveLoop()
while enabled do
if isCurrentlyEmoting and not Options.ReviveWhileEmoteToggle.Value then
task.wait(0.3)
continue
end
local myChar = LocalPlayer.Character
if myChar and myChar:FindFirstChild("HumanoidRootPart") then
local myHRP = myChar.HumanoidRootPart
for _, pl in Players:GetPlayers() do
if pl ~= LocalPlayer and pl.Character and pl.Character:FindFirstChild("HumanoidRootPart") then
if isPlayerDowned(pl) then
local dist = (myHRP.Position - pl.Character.HumanoidRootPart.Position).Magnitude
if dist <= reviveRange then
pcall(function()
interactEvent:FireServer("Revive", true, pl.Name)
end)
end
end
end
end
end
task.wait(loopDelay)
end
end
local function start()
if handle then return end
enabled = true
updateEmoteStatus()
if LocalPlayer.Character then
stateConnection = LocalPlayer.Character:GetAttributeChangedSignal("State"):Connect(updateEmoteStatus)
end
LocalPlayer.CharacterAdded:Connect(function(char)
if stateConnection then stateConnection:Disconnect() end
stateConnection = char:GetAttributeChangedSignal("State"):Connect(updateEmoteStatus)
updateEmoteStatus()
end)
handle = task.spawn(reviveLoop)
end
local function stop()
enabled = false
if handle then task.cancel(handle) handle = nil end
if stateConnection then stateConnection:Disconnect() stateConnection = nil end
isCurrentlyEmoting = false
end
return {
Start = start,
Stop = stop,
SetDelay = function(d) loopDelay = d end,
}
end)()
InstantReviveToggle:OnChanged(function(state)
if state then
InstantReviveModule.SetDelay(getgenv().InstantReviveDelay)
InstantReviveModule.Start()
else
InstantReviveModule.Stop()
end
end)
ReviveDelaySlider:OnChanged(function(value)
getgenv().InstantReviveDelay = value
InstantReviveModule.SetDelay(value)
end)
MiscTab:AddParagraph({
Title = "",
Content = ""
})
AutoCarryToggle = MiscTab:AddToggle("AutoCarryToggle", {
Title = "Auto Carry",
Default = false
})
CarryGUIToggle = MiscTab:AddToggle("CarryGUIToggle", {
Title = "Carry GUI Button",
Default = false
})
CarryButtonSizeInput = MiscTab:AddInput("CarryButtonSizeInput", {
Title = "Carry Button Size",
Default = "200",
Placeholder = "Enter size (150-400)",
Numeric = true,
Finished = false,
Callback = function(Value)
if Value and tonumber(Value) then
local size = tonumber(Value)
local CoreGui = game:GetService("CoreGui")
local existingScreenGui = CoreGui:FindFirstChild("AutoCarryButtonGUI")
if existingScreenGui then
local button = existingScreenGui:FindFirstChild("GradientBtn")
if button then
local newWidth = math.max(150, math.min(size, 400))
local newHeight = math.max(60, math.min(size * 0.4, 160))
button.Size = UDim2.new(0, newWidth, 0, newHeight)
end
end
end
end
})
CarryKeybind = MiscTab:AddKeybind("CarryKeybind", {
Title = "Auto Carry Keybind",
Mode = "Toggle",
Default = "F3",
ChangedCallback = function(New)
Options.AutoCarryToggle:SetValue(not Options.AutoCarryToggle.Value)
end
})
local AutoCarryConnection = nil
local featureStates = featureStates or {}
local player = game:GetService("Players").LocalPlayer
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local function createGradientButton(parent, position, size, text)
local button = Instance.new("Frame")
button.Name = "GradientBtn"
button.BackgroundTransparency = 0.7
button.Size = size
button.Position = position
button.Draggable = true
button.Active = true
button.Selectable = true
button.Parent = parent
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(1, 0)
corner.Parent = button
local gradient = Instance.new("UIGradient")
gradient.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 0, 0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(0, 0, 0))
}
gradient.Rotation = 45
gradient.Parent = button
local stroke = Instance.new("UIStroke")
stroke.Color = Color3.fromRGB(120, 0, 0)
stroke.Thickness = 2
stroke.Parent = button
local label = Instance.new("TextLabel")
label.Text = text
label.Size = UDim2.new(1, 0, 1, 0)
label.BackgroundTransparency = 1
label.TextColor3 = Color3.fromRGB(255, 255, 255)
label.TextSize = 30
label.Font = Enum.Font.GothamMedium
label.Parent = button
local clicker = Instance.new("TextButton")
clicker.Size = UDim2.new(1, 0, 1, 0)
clicker.BackgroundTransparency = 1
clicker.Text = ""
clicker.ZIndex = 5
clicker.Active = false
clicker.Selectable = false
clicker.Parent = button
return button, clicker, stroke
end
local function startAutoCarry()
if AutoCarryConnection then return end
AutoCarryConnection = RunService.Heartbeat:Connect(function()
if not featureStates.AutoCarry then
return
end
local char = player.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if hrp then
for _, other in ipairs(Players:GetPlayers()) do
if other ~= player and other.Character and other.Character:FindFirstChild("HumanoidRootPart") then
local dist = (hrp.Position - other.Character.HumanoidRootPart.Position).Magnitude
if dist <= 20 then
local args = { "Carry", [3] = other.Name }
pcall(function()
game:GetService("ReplicatedStorage"):WaitForChild("Events"):WaitForChild("Character"):WaitForChild("Interact"):FireServer(unpack(args))
end)
task.wait(0.01)
end
end
end
end
end)
end
local function stopAutoCarry()
if AutoCarryConnection then
AutoCarryConnection:Disconnect()
AutoCarryConnection = nil
end
end
local function toggleAutoCarryGUI()
local CoreGui = game:GetService("CoreGui")
local existingScreenGui = CoreGui:FindFirstChild("AutoCarryButtonGUI")
if existingScreenGui then
existingScreenGui:Destroy()
else
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "AutoCarryButtonGUI"
screenGui.ResetOnSpawn = false
screenGui.Parent = CoreGui
local buttonSize = 200
if Options.CarryButtonSizeInput and Options.CarryButtonSizeInput.Value and tonumber(Options.CarryButtonSizeInput.Value) then
buttonSize = tonumber(Options.CarryButtonSizeInput.Value)
end
local btnWidth = math.max(150, math.min(buttonSize, 400))
local btnHeight = math.max(60, math.min(buttonSize * 0.4, 160))
local btn, clicker, stroke = createGradientButton(
screenGui,
UDim2.new(0.5, -btnWidth/2, 0.5, -btnHeight/2),
UDim2.new(0, btnWidth, 0, btnHeight),
"Auto Carry:Off"
)
local function updateButtonText()
if btn and btn:FindFirstChild("TextLabel") then
btn.TextLabel.Text = featureStates.AutoCarry and "Auto Carry:On" or "Auto Carry:Off"
end
end
updateButtonText()
clicker.MouseButton1Click:Connect(function()
featureStates.AutoCarry = not featureStates.AutoCarry
updateButtonText()
if featureStates.AutoCarry then
startAutoCarry()
else
stopAutoCarry()
end
end)
AutoCarryToggle:OnChanged(function(state)
featureStates.AutoCarry = state
updateButtonText()
if state then
startAutoCarry()
else
stopAutoCarry()
end
end)
end
end
AutoCarryToggle:OnChanged(function(state)
featureStates.AutoCarry = state
if state then
startAutoCarry()
else
stopAutoCarry()
end
end)
CarryGUIToggle:OnChanged(function(state)
if state then
toggleAutoCarryGUI()
else
local CoreGui = game:GetService("CoreGui")
local existingScreenGui = CoreGui:FindFirstChild("AutoCarryButtonGUI")
if existingScreenGui then
existingScreenGui:Destroy()
end
end
end)
MiscTab:AddParagraph({
Title = "",
Content = ""
})
AutoDrinkToggle = MiscTab:AddToggle("AutoDrinkToggle", {
Title = "Auto Drink Cola",
Default = false
})
DrinkDelayInput = MiscTab:AddInput("DrinkDelayInput", {
Title = "Drink Delay (seconds)",
Default = "0.5",
Placeholder = "Delay between drinks",
Numeric = true,
Finished = false,
Callback = function(Value)
if Value and tonumber(Value) then
local delay = tonumber(Value)
if delay > 0 then
featureStates.DrinkDelay = delay
end
end
end
})
local AutoDrinkConnection = nil
local featureStates = featureStates or {}
local player = game:GetService("Players").LocalPlayer
local RunService = game:GetService("RunService")
featureStates.DrinkDelay = 0.5
local function startAutoDrink()
if AutoDrinkConnection then return end
AutoDrinkConnection = task.spawn(function()
while featureStates.AutoDrink do
local ohTable1 = {
["Forced"] = true,
["Key"] = "Cola",
["Down"] = true
}
pcall(function()
player.PlayerScripts.Events.temporary_events.UseKeybind:Fire(ohTable1)
end)
task.wait(featureStates.DrinkDelay)
end
AutoDrinkConnection = nil
end)
end
local function stopAutoDrink()
if AutoDrinkConnection then
task.cancel(AutoDrinkConnection)
AutoDrinkConnection = nil
end
end
player.CharacterRemoving:Connect(function()
if featureStates.AutoDrink then
stopAutoDrink()
end
end)
player.CharacterAdded:Connect(function()
if featureStates.AutoDrink then
task.wait(1)
startAutoDrink()
end
end)
AutoDrinkToggle:OnChanged(function(state)
featureStates.AutoDrink = state
if state then
startAutoDrink()
else
stopAutoDrink()
end
end)
featureStates.AutoDrink = false
featureStates.AutoCarry = false
MiscTab:AddParagraph({
Title = "",
Content = ""
})
math.randomseed(tick())
local emoteInputs = {}
for i = 1, 12 do
emoteInputs[i] = MiscTab:AddInput("EmoteInput" .. i, {
Title = "Emote " .. i,
Default = "",
Placeholder = "Emote Name Here",
Finished = false,
Callback = function(Value)
featureStates["Emote" .. i] = Value
end
})
end
local emoteGui = nil
local emoteGuiButton = nil
local emoteGuiVisible = false
local player = game:GetService("Players").LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local featureStates = featureStates or {}
local isMobile = UserInputService.TouchEnabled
local emoteKeybindValue = ""
local function makeDraggable(frame)
frame.Active = true
frame.Draggable = true
local dragging = false
local dragStart, startPos
local function update(input)
local delta = input.Position - dragStart
frame.Position = UDim2.new(
startPos.X.Scale,
startPos.X.Offset + delta.X,
startPos.Y.Scale,
startPos.Y.Offset + delta.Y
)
end
frame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = frame.Position
frame.BackgroundTransparency = 0.6
end
end)
frame.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = false
frame.BackgroundTransparency = 0.7
end
end)
UserInputService.InputChanged:Connect(function(input)
if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
update(input)
end
end)
end
local function triggerRandomEmote()
local validEmotes = {}
for i = 1, 12 do
local emoteName = featureStates["Emote" .. i]
if emoteName and emoteName ~= "" then
table.insert(validEmotes, emoteName)
end
end
if #validEmotes > 0 then
math.randomseed(tick() + #validEmotes)
local ohTable1 = { ["Key"] = "Crouch", ["Down"] = true }
pcall(function()
player.PlayerScripts.Events.temporary_events.UseKeybind:Fire(ohTable1)
end)
local randomIndex = math.random(1, #validEmotes)
local randomEmote = validEmotes[randomIndex]
pcall(function()
ReplicatedStorage.Events.Character.Emote:FireServer(randomEmote)
end)
end
end
local function createGradientButton(parent, position, size, text)
local button = Instance.new("Frame")
button.Name = "GradientBtn"
button.BackgroundTransparency = 0.7
button.Size = size
button.Position = position
button.Draggable = true
button.Active = true
button.Selectable = true
button.Parent = parent
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(1, 0)
corner.Parent = button
local gradient = Instance.new("UIGradient")
gradient.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 0, 0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(0, 0, 0))
}
gradient.Rotation = 45
gradient.Parent = button
local stroke = Instance.new("UIStroke")
stroke.Color = Color3.fromRGB(120, 0, 0)
stroke.Thickness = 2
stroke.Parent = button
local label = Instance.new("TextLabel")
label.Text = text
label.Size = UDim2.new(1, 0, 1, 0)
label.BackgroundTransparency = 1
label.TextColor3 = Color3.fromRGB(255, 255, 255)
label.TextSize = 16
label.Font = Enum.Font.GothamMedium
label.TextWrapped = true
label.Parent = button
local clicker = Instance.new("TextButton")
clicker.Size = UDim2.new(1, 0, 1, 0)
clicker.BackgroundTransparency = 1
clicker.Text = ""
clicker.ZIndex = 5
clicker.Active = false
clicker.Selectable = false
clicker.Parent = button
clicker.MouseEnter:Connect(function()
stroke.Color = Color3.fromRGB(160, 0, 0)
end)
clicker.MouseLeave:Connect(function()
stroke.Color = Color3.fromRGB(120, 0, 0)
end)
return button, clicker, stroke
end
local function createEmoteGui(yOffset)
local emoteGuiOld = playerGui:FindFirstChild("EmoteGui")
if emoteGuiOld then emoteGuiOld:Destroy() end
emoteGui = Instance.new("ScreenGui")
emoteGui.Name = "EmoteGui"
emoteGui.IgnoreGuiInset = true
emoteGui.ResetOnSpawn = false
emoteGui.Enabled = emoteGuiVisible and isMobile
emoteGui.Parent = playerGui
local buttonText = "Emote Crouch " .. emoteKeybindValue
local btn, clicker, stroke = createGradientButton(
emoteGui,
UDim2.new(0.5, -100, 0.12 + (yOffset or 0), -40),
UDim2.new(0, 200, 0, 80),
buttonText
)
makeDraggable(btn)
clicker.MouseButton1Click:Connect(function()
triggerRandomEmote()
end)
emoteGuiButton = btn
end
EmoteKeybind = MiscTab:AddKeybind("EmoteKeybind", {
Title = "Emote Keybind",
Mode = "Toggle",
Default = "",
ChangedCallback = function(New)
emoteKeybindValue = New
if emoteGuiButton and emoteGuiButton:FindFirstChild("TextLabel") then
emoteGuiButton.TextLabel.Text = "Emote Crouch\nClick or Press " .. New
end
end,
Callback = function()
triggerRandomEmote()
end
})
EmoteGUIToggle = MiscTab:AddToggle("EmoteGUIToggle", {
Title = "Emote Crouch",
Description = "Click button or use keybind to trigger random emote. Only type emote name without space and inside your emote slot will work",
Default = false,
Callback = function(state)
emoteGuiVisible = state
if state then
if isMobile and not emoteGui then
createEmoteGui(0)
elseif emoteGui then
emoteGui.Enabled = isMobile
end
else
if emoteGui then
emoteGui:Destroy()
emoteGui = nil
emoteGuiButton = nil
end
end
end
})
player.CharacterAdded:Connect(function()
if emoteGuiVisible and isMobile and not emoteGui then
createEmoteGui(0)
end
end)
MiscTab:AddSection("Movement Modification")
local originalEmoteSpeeds = {}
local itemsFolder = game:GetService("ReplicatedStorage"):FindFirstChild("Items")
if itemsFolder then
local emotesFolder = itemsFolder:FindFirstChild("Emotes")
if emotesFolder then
for _, emoteModule in ipairs(emotesFolder:GetChildren()) do
if emoteModule:IsA("ModuleScript") then
local success, emoteData = pcall(require, emoteModule)
if success and emoteData and emoteData.EmoteInfo then
originalEmoteSpeeds[emoteModule.Name] = emoteData.EmoteInfo.SpeedMult
end
end
end
end
end
local function applyEmoteSpeed(speedValue)
if not itemsFolder then return end
local emotesFolder = itemsFolder:FindFirstChild("Emotes")
if not emotesFolder then return end
for _, emoteModule in ipairs(emotesFolder:GetChildren()) do
if emoteModule:IsA("ModuleScript") then
local success, emoteData = pcall(require, emoteModule)
if success and emoteData and emoteData.EmoteInfo and emoteData.EmoteInfo.SpeedMult ~= 0 then
emoteData.EmoteInfo.SpeedMult = speedValue
end
end
end
end
local function restoreOriginalEmoteSpeeds()
if not itemsFolder then return end
local emotesFolder = itemsFolder:FindFirstChild("Emotes")
if not emotesFolder then return end
for _, emoteModule in ipairs(emotesFolder:GetChildren()) do
if emoteModule:IsA("ModuleScript") then
local originalSpeed = originalEmoteSpeeds[emoteModule.Name]
if originalSpeed then
local success, emoteData = pcall(require, emoteModule)
if success and emoteData and emoteData.EmoteInfo then
emoteData.EmoteInfo.SpeedMult = originalSpeed
end
end
end
end
end
local requiredFields = {
Friction = true,
AirStrafeAcceleration = true,
JumpHeight = true,
RunDeaccel = true,
JumpSpeedMultiplier = true,
JumpCap = true,
SprintCap = true,
WalkSpeedMultiplier = true,
BhopEnabled = true,
Speed = true,
AirAcceleration = true,
RunAccel = true,
SprintAcceleration = true
}
local function getMatchingTables()
local matched = {}
for _, obj in pairs(getgc(true)) do
if typeof(obj) == "table" then
local ok = true
for field in pairs(requiredFields) do
if rawget(obj, field) == nil then
ok = false
break
end
end
if ok then
table.insert(matched, obj)
end
end
end
return matched
end
local function applySpeedMultiplier(speedMultiplier)
local targets = getMatchingTables()
for _, tableObj in ipairs(targets) do
if tableObj and typeof(tableObj) == "table" then
pcall(function()
tableObj.WalkSpeedMultiplier = speedMultiplier
end)
end
end
end
local player = game:GetService("Players").LocalPlayer
local function getPlayerObj()
local gamePlayers = workspace.Game and workspace.Game.Players
if not gamePlayers then return nil end
return gamePlayers:FindFirstChild(player.Name)
end
local playerObj = nil
local connection = nil
local emotingSpeed = 1.5
local function setupConnection(obj)
if connection then
connection:Disconnect()
connection = nil
end
playerObj = obj
if not obj then return end
local function onStateChanged()
local state = obj:GetAttribute("State")
local targetSpeed = (state == "Emoting") and emotingSpeed or 1.5
applySpeedMultiplier(targetSpeed)
end
onStateChanged()
connection = obj:GetAttributeChangedSignal("State"):Connect(onStateChanged)
end
local function resetMultiplierSpeed()
emotingSpeed = 1.5
applySpeedMultiplier(1.5)
end
EmoteSpeedModeDropdown = MiscTab:AddDropdown("EmoteSpeedModeDropdown", {
Title = "Emote speed mode",
Values = {"Nah", "Legit", "Multiplier speed"},
Multi = false,
Default = "Nah",
Callback = function(Value)
if Value == "Nah" then
resetMultiplierSpeed()
restoreOriginalEmoteSpeeds()
if connection then
connection:Disconnect()
connection = nil
end
elseif Value == "Multiplier speed" then
restoreOriginalEmoteSpeeds()
setupConnection(getPlayerObj())
task.spawn(function()
while Options.EmoteSpeedModeDropdown and Options.EmoteSpeedModeDropdown.Value == "Multiplier speed" do
task.wait(2)
local current = getPlayerObj()
if current ~= playerObj then
setupConnection(current)
elseif playerObj then
local state = playerObj:GetAttribute("State")
local targetSpeed = (state == "Emoting") and emotingSpeed or 1.5
applySpeedMultiplier(targetSpeed)
end
end
end)
elseif Value == "Legit" then
resetMultiplierSpeed()
if connection then
connection:Disconnect()
connection = nil
end
local speedValue = featureStates.EmoteSpeedValue or 2
applyEmoteSpeed(speedValue)
end
end
})
EmoteSpeedInput = MiscTab:AddInput("EmoteSpeedInput", {
Title = "Emote Speed Value",
Default = "1500",
Placeholder = "Enter speed value",
Numeric = true,
Finished = false,
Callback = function(Value)
local num = tonumber(Value)
if num and num > 0 then
featureStates.EmoteSpeedValue = num
local appliedValue = num / 1000
if Options.EmoteSpeedModeDropdown and Options.EmoteSpeedModeDropdown.Value == "Legit" then
applyEmoteSpeed(appliedValue)
elseif Options.EmoteSpeedModeDropdown and Options.EmoteSpeedModeDropdown.Value == "Multiplier speed" then
emotingSpeed = appliedValue
end
end
end
})
ApplyUnwalkableButton = MiscTab:AddButton({
Title = "Apply Speed to Unwalkable Emotes",
Callback = function()
if not itemsFolder then return end
local emotesFolder = itemsFolder:FindFirstChild("Emotes")
if not emotesFolder then return end
local speedValue = featureStates.EmoteSpeedValue or 2
for _, emoteModule in ipairs(emotesFolder:GetChildren()) do
if emoteModule:IsA("ModuleScript") then
local success, emoteData = pcall(require, emoteModule)
if success and emoteData and emoteData.EmoteInfo and emoteData.EmoteInfo.SpeedMult == 0 then
emoteData.EmoteInfo.SpeedMult = speedValue
end
end
end
end
})
ResetEmoteSpeedButton = MiscTab:AddButton({
Title = "Reset Emote Speed",
Callback = function()
Fluent:Notify({
Title = "Emote Speed",
Content = "Resetting emote speeds...",
Duration = 3
})
restoreOriginalEmoteSpeeds()
resetMultiplierSpeed()
end
})
local infiniteSlideEnabled = false
local slideFrictionValue = -8
local movementTables = {}
local infiniteSlideHeartbeat = nil
local infiniteSlideCharacterConn = nil
local RunService = game:GetService("RunService")
local player = game:GetService("Players").LocalPlayer
local requiredKeys = {
"Friction","AirStrafeAcceleration","JumpHeight","RunDeaccel",
"JumpSpeedMultiplier","JumpCap","SprintCap","WalkSpeedMultiplier",
"BhopEnabled","Speed","AirAcceleration","RunAccel","SprintAcceleration"
}
local function hasRequiredFields(tbl)
if typeof(tbl) ~= "table" then return false end
for _, key in ipairs(requiredKeys) do
if rawget(tbl, key) == nil then return false end
end
return true
end
local function findMovementTables()
movementTables = {}
for _, obj in ipairs(getgc(true)) do
if hasRequiredFields(obj) then
table.insert(movementTables, obj)
end
end
return #movementTables > 0
end
local function setSlideFriction(value)
local appliedCount = 0
for _, tbl in ipairs(movementTables) do
pcall(function()
tbl.Friction = value
appliedCount = appliedCount + 1
end)
end
if appliedCount == 0 then
for _, obj in ipairs(getgc(true)) do
if hasRequiredFields(obj) then
pcall(function()
obj.Friction = value
end)
end
end
end
end
local function updatePlayerModel()
local gameFolder = workspace:FindFirstChild("Game")
if not gameFolder then return false end
local playersFolder = gameFolder:FindFirstChild("Players")
if not playersFolder then return false end
local playerModel = playersFolder:FindFirstChild(player.Name)
return playerModel
end
local function infiniteSlideHeartbeatFunc()
if not infiniteSlideEnabled then return end
local playerModel = updatePlayerModel()
if not playerModel then return end
local state = playerModel:GetAttribute("State")
if state == "Slide" then
pcall(function()
playerModel:SetAttribute("State", "EmotingSlide")
end)
elseif state == "EmotingSlide" then
setSlideFriction(slideFrictionValue)
else
setSlideFriction(5)
end
end
local function onCharacterAddedSlide(character)
if not infiniteSlideEnabled then return end
for i = 1, 5 do
task.wait(0.5)
if updatePlayerModel() then
break
end
end
task.wait(0.5)
findMovementTables()
end
local function setInfiniteSlide(enabled)
infiniteSlideEnabled = enabled
if enabled then
findMovementTables()
updatePlayerModel()
if not infiniteSlideCharacterConn then
infiniteSlideCharacterConn = player.CharacterAdded:Connect(onCharacterAddedSlide)
end
if player.Character then
task.spawn(function()
onCharacterAddedSlide(player.Character)
end)
end
if infiniteSlideHeartbeat then infiniteSlideHeartbeat:Disconnect() end
infiniteSlideHeartbeat = RunService.Heartbeat:Connect(infiniteSlideHeartbeatFunc)
else
if infiniteSlideHeartbeat then
infiniteSlideHeartbeat:Disconnect()
infiniteSlideHeartbeat = nil
end
if infiniteSlideCharacterConn then
infiniteSlideCharacterConn:Disconnect()
infiniteSlideCharacterConn = nil
end
setSlideFriction(5)
movementTables = {}
end
end
InfiniteSlideToggle = MiscTab:AddToggle("InfiniteSlideToggle", {
Title = "Sprint Slide",
Default = false,
Callback = function(Value)
setInfiniteSlide(Value)
end
})
SlideFrictionInput = MiscTab:AddInput("SlideFrictionInput", {
Title = "Slide Speed (Negative only)",
Default = "-8",
Numeric = true,
Finished = false,
Callback = function(Value)
local num = tonumber(Value)
if num then
slideFrictionValue = num
if infiniteSlideEnabled then
setSlideFriction(slideFrictionValue)
end
end
end
})
MiscTab:AddParagraph({
Title = "",
Content = ""
})
local gravityEnabled = false
local originalGravity = workspace.Gravity
local gravityValue = 10
local gravityHeartbeat = nil
local gravityKeybindValue = "G"
local function createGravityButton()
local CoreGui = game:GetService("CoreGui")
local existingScreenGui = CoreGui:FindFirstChild("GravityButtonGUI")
if existingScreenGui then
existingScreenGui:Destroy()
else
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "GravityButtonGUI"
screenGui.ResetOnSpawn = false
screenGui.Parent = CoreGui
local buttonSize = 200
local btnWidth = math.max(150, math.min(buttonSize, 400))
local btnHeight = math.max(60, math.min(buttonSize * 0.4, 160))
local btn, clicker, stroke = createGradientButton(
screenGui,
UDim2.new(0.5, -btnWidth/2, 0.5, 60),
UDim2.new(0, btnWidth, 0, btnHeight),
gravityEnabled and "Gravity:On" or "Gravity:Off"
)
clicker.MouseButton1Click:Connect(function()
gravityEnabled = not gravityEnabled
if btn:FindFirstChild("TextLabel") then
btn.TextLabel.Text = gravityEnabled and "Gravity:On" or "Gravity:Off"
end
if gravityEnabled then
workspace.Gravity = gravityValue
else
workspace.Gravity = originalGravity
end
end)
end
end
local function toggleGravity()
gravityEnabled = not gravityEnabled
if gravityEnabled then
workspace.Gravity = gravityValue
else
workspace.Gravity = originalGravity
end
if Options.GravityButtonToggle and Options.GravityButtonToggle.Value then
createGravityButton()
end
end
GravityToggle = MiscTab:AddToggle("GravityToggle", {
Title = "Gravity",
Default = false,
Callback = function(Value)
gravityEnabled = Value
if Value then
workspace.Gravity = gravityValue
else
workspace.Gravity = originalGravity
end
end
})
GravityButtonToggle = MiscTab:AddToggle("GravityButtonToggle", {
Title = "Gravity Button GUI",
Default = false,
Callback = function(Value)
if Value then
createGravityButton()
else
local CoreGui = game:GetService("CoreGui")
local existingScreenGui = CoreGui:FindFirstChild("GravityButtonGUI")
if existingScreenGui then
existingScreenGui:Destroy()
end
end
end
})
GravityKeybind = MiscTab:AddKeybind("GravityKeybind", {
Title = "Gravity Keybind",
Mode = "Toggle",
Default = "G",
ChangedCallback = function(New)
gravityKeybindValue = New
end,
Callback = function()
toggleGravity()
end
})
GravityAdjustmentInput = MiscTab:AddInput("GravityAdjustmentInput", {
Title = "Gravity Adjustment",
Default = "10",
Placeholder = "Enter gravity value",
Numeric = true,
Finished = false,
Callback = function(Value)
local num = tonumber(Value)
if num and num > 0 then
gravityValue = num
if gravityEnabled then
workspace.Gravity = gravityValue
end
end
end
})
originalGravity = workspace.Gravity
GravityToggle:OnChanged(function(state)
if Options.GravityButtonToggle and Options.GravityButtonToggle.Value then
local CoreGui = game:GetService("CoreGui")
local screenGui = CoreGui:FindFirstChild("GravityButtonGUI")
if screenGui then
local button = screenGui:FindFirstChild("GradientBtn")
if button and button:FindFirstChild("TextLabel") then
button.TextLabel.Text = state and "Gravity:On" or "Gravity:Off"
end
end
end
end)
GravityButtonSizeInput = MiscTab:AddInput("GravityButtonSizeInput", {
Title = "Gravity Button Size",
Default = "1",
Numeric = true,
Finished = false,
Callback = function(Value)
if Value and tonumber(Value) then
local scale = tonumber(Value)
scale = math.max(0.5, math.min(scale, 3.0))
local CoreGui = game:GetService("CoreGui")
local existingScreenGui = CoreGui:FindFirstChild("GravityButtonGUI")
if existingScreenGui then
local button = existingScreenGui:FindFirstChild("GradientBtn")
if button then
local uiScale = button:FindFirstChild("UIScale") or Instance.new("UIScale")
uiScale.Scale = scale
uiScale.Parent = button
end
end
end
end
})
MiscTab:AddParagraph({
Title = "Heads up: Turn off infinite slide when bhopping to get better trims blah blah blah",
Content = ""
})
local player = game:GetService("Players").LocalPlayer
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
getgenv().autoJumpType = "Bounce"
getgenv().bhopMode = "Acceleration"
getgenv().bhopAccelValue = -0.5
getgenv().bhopHoldActive = false
getgenv().autoJumpEnabled = false
getgenv().jumpCooldown = 0.7
featureStates = featureStates or {}
featureStates.Bhop = false
featureStates.BhopHold = false
local isMobile = UserInputService.TouchEnabled
local bhopConnection = nil
local bhopLoaded = false
local bhopKeyConnection = nil
local characterConnection = nil
local frictionTables = {}
local Character = nil
local Humanoid = nil
local HumanoidRootPart = nil
local LastJump = 0
local GROUND_CHECK_DISTANCE = 3.5
local MAX_SLOPE_ANGLE = 45
local bhopButtonScreenGui = nil
local function findFrictionTables()
frictionTables = {}
for _, t in pairs(getgc(true)) do
if type(t) == "table" and rawget(t, "Friction") then
table.insert(frictionTables, {obj = t, original = t.Friction})
end
end
end
local function setFriction(value)
for _, e in ipairs(frictionTables) do
if e.obj and type(e.obj) == "table" and rawget(e.obj, "Friction") then
e.obj.Friction = value
end
end
end
local function resetBhopFriction()
for _, e in ipairs(frictionTables) do
if e.obj and type(e.obj) == "table" and rawget(e.obj, "Friction") then
e.obj.Friction = e.original
end
end
frictionTables = {}
end
local function applyBhopFriction()
if not (getgenv().autoJumpEnabled or getgenv().bhopHoldActive) then
resetBhopFriction()
return
end
if getgenv().bhopMode == "Acceleration" then
findFrictionTables()
if #frictionTables > 0 then
setFriction(getgenv().bhopAccelValue or -0.5)
end
else
resetBhopFriction()
end
end
local function IsOnGround()
if not Character or not HumanoidRootPart or not Humanoid then return false end
local state = Humanoid:GetState()
if state == Enum.HumanoidStateType.Jumping or
state == Enum.HumanoidStateType.Freefall or
state == Enum.HumanoidStateType.Swimming then
return false
end
local raycastParams = RaycastParams.new()
raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
raycastParams.FilterDescendantsInstances = {Character}
raycastParams.IgnoreWater = true
local rayOrigin = HumanoidRootPart.Position
local rayDirection = Vector3.new(0, -GROUND_CHECK_DISTANCE, 0)
local raycastResult = workspace:Raycast(rayOrigin, rayDirection, raycastParams)
if not raycastResult then return false end
local surfaceNormal = raycastResult.Normal
local angle = math.deg(math.acos(surfaceNormal:Dot(Vector3.new(0, 1, 0))))
return angle <= MAX_SLOPE_ANGLE
end
local function updateBhop()
if not bhopLoaded then return end
local character = player.Character
local humanoid = character and character:FindFirstChild("Humanoid")
if not character or not humanoid then
return
end
local isBhopActive = getgenv().autoJumpEnabled or getgenv().bhopHoldActive
if isBhopActive then
local now = tick()
if IsOnGround() and (now - LastJump) > getgenv().jumpCooldown then
if getgenv().autoJumpType == "Realistic" then
player.PlayerScripts.Events.temporary_events.JumpReact:Fire()
task.wait(0.1)
player.PlayerScripts.Events.temporary_events.EndJump:Fire()
else
humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end
LastJump = now
end
end
end
local function loadBhop()
if bhopLoaded then return end
bhopLoaded = true
if bhopConnection then
bhopConnection:Disconnect()
end
bhopConnection = RunService.Heartbeat:Connect(updateBhop)
applyBhopFriction()
end
local function unloadBhop()
if not bhopLoaded then return end
bhopLoaded = false
if bhopConnection then
bhopConnection:Disconnect()
bhopConnection = nil
end
getgenv().bhopHoldActive = false
resetBhopFriction()
end
local function checkBhopState()
local shouldLoad = getgenv().autoJumpEnabled or getgenv().bhopHoldActive
if shouldLoad then
loadBhop()
else
unloadBhop()
end
end
local function reapplyBhopOnRespawn()
if getgenv().autoJumpEnabled or getgenv().bhopHoldActive then
task.wait(0.5)
applyBhopFriction()
checkBhopState()
end
end
local function createBhopGradientButton()
local CoreGui = game:GetService("CoreGui")
if bhopButtonScreenGui then
bhopButtonScreenGui:Destroy()
bhopButtonScreenGui = nil
end
bhopButtonScreenGui = Instance.new("ScreenGui")
bhopButtonScreenGui.Name = "BhopButtonGUI"
bhopButtonScreenGui.ResetOnSpawn = false
bhopButtonScreenGui.Parent = CoreGui
local buttonSize = 200
local btnWidth = math.max(150, math.min(buttonSize, 400))
local btnHeight = math.max(60, math.min(buttonSize * 0.4, 160))
local btn, clicker, stroke = createGradientButton(
bhopButtonScreenGui,
UDim2.new(0.5, -btnWidth/2, 0.5, 120),
UDim2.new(0, btnWidth, 0, btnHeight),
getgenv().autoJumpEnabled and "Auto Jump: On" or "Auto Jump: Off"
)
clicker.MouseButton1Click:Connect(function()
getgenv().autoJumpEnabled = not getgenv().autoJumpEnabled
featureStates.Bhop = getgenv().autoJumpEnabled
if btn:FindFirstChild("TextLabel") then
btn.TextLabel.Text = getgenv().autoJumpEnabled and "Auto Jump: On" or "Auto Jump: Off"
end
if Options.BhopToggle then
Options.BhopToggle:SetValue(getgenv().autoJumpEnabled)
end
checkBhopState()
end)
return bhopButtonScreenGui
end
local function updateBhopButtonText()
if bhopButtonScreenGui and bhopButtonScreenGui:FindFirstChild("GradientBtn") then
local button = bhopButtonScreenGui:FindFirstChild("GradientBtn")
if button and button:FindFirstChild("TextLabel") then
button.TextLabel.Text = getgenv().autoJumpEnabled and "Auto Jump: On" or "Auto Jump: Off"
end
end
end
local function setupJumpButton()
local success, err = pcall(function()
local touchGui = player:WaitForChild("PlayerGui", 5):WaitForChild("TouchGui", 5)
if not touchGui then return end
local touchControlFrame = touchGui:WaitForChild("TouchControlFrame", 5)
if not touchControlFrame then return end
local jumpButton = touchControlFrame:WaitForChild("JumpButton", 5)
if not jumpButton then return end
jumpButton.MouseButton1Down:Connect(function()
if featureStates.BhopHold then
getgenv().bhopHoldActive = true
checkBhopState()
end
end)
jumpButton.MouseButton1Up:Connect(function()
getgenv().bhopHoldActive = false
checkBhopState()
end)
end)
end
AutoJumpTypeDropdown = MiscTab:AddDropdown("AutoJumpTypeDropdown", {
Title = "Auto Jump Type",
Values = {"Bounce", "Realistic"},
Multi = false,
Default = "Bounce",
Callback = function(Value)
getgenv().autoJumpType = Value
end
})
BhopToggle = MiscTab:AddToggle("BhopToggle", {
Title = "Bunny Hop",
Default = false,
Callback = function(Value)
featureStates.Bhop = Value
getgenv().autoJumpEnabled = Value
updateBhopButtonText()
checkBhopState()
end
})
BhopHoldToggle = MiscTab:AddToggle("BhopHoldToggle", {
Title = "Bhop Hold (Hold Space/Jump)",
Default = false,
Callback = function(Value)
featureStates.BhopHold = Value
if not Value then
getgenv().bhopHoldActive = false
checkBhopState()
end
end
})
BhopButtonToggle = MiscTab:AddToggle("BhopButtonToggle", {
Title = "Bhop Button GUI",
Default = false,
Callback = function(Value)
if Value then
createBhopGradientButton()
else
if bhopButtonScreenGui then
bhopButtonScreenGui:Destroy()
bhopButtonScreenGui = nil
end
end
end
})
BhopKeybind = MiscTab:AddKeybind("BhopKeybind", {
Title = "Bhop Keybind",
Mode = "Toggle",
Default = "B",
ChangedCallback = function(New)
end,
Callback = function()
getgenv().autoJumpEnabled = not getgenv().autoJumpEnabled
featureStates.Bhop = getgenv().autoJumpEnabled
if Options.BhopToggle then
Options.BhopToggle:SetValue(getgenv().autoJumpEnabled)
end
updateBhopButtonText()
checkBhopState()
end
})
BhopModeDropdown = MiscTab:AddDropdown("BhopModeDropdown", {
Title = "Bhop Mode",
Values = {"Acceleration", "No Acceleration"},
Multi = false,
Default = "Acceleration",
Callback = function(Value)
getgenv().bhopMode = Value
checkBhopState()
end
})
BhopAccelInput = MiscTab:AddInput("BhopAccelInput", {
Title = "Bhop Acceleration",
Default = "-0.5",
Placeholder = "Enter negative value (e.g., -0.5)",
Numeric = true,
Finished = false,
Callback = function(Value)
local num = tonumber(Value)
if num and string.sub(Value, 1, 1) == "-" then
getgenv().bhopAccelValue = num
if getgenv().autoJumpEnabled or getgenv().bhopHoldActive then
applyBhopFriction()
end
end
end
})
JumpCooldownInput = MiscTab:AddInput("JumpCooldownInput", {
Title = "Jump Cooldown (Seconds)",
Default = "0.7",
Placeholder = "Enter cooldown in seconds",
Numeric = true,
Finished = false,
Callback = function(Value)
local num = tonumber(Value)
if num and num > 0 then
getgenv().jumpCooldown = num
end
end
})
RunService.Heartbeat:Connect(function()
if not Character or not Character:IsDescendantOf(workspace) then
Character = player.Character or player.CharacterAdded:Wait()
if Character then
Humanoid = Character:FindFirstChildOfClass("Humanoid")
HumanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
else
Humanoid = nil
HumanoidRootPart = nil
end
end
end)
if characterConnection then
characterConnection:Disconnect()
end
characterConnection = player.CharacterAdded:Connect(function(character)
Character = character
Humanoid = character:WaitForChild("Humanoid")
HumanoidRootPart = character:WaitForChild("HumanoidRootPart")
setupJumpButton()
reapplyBhopOnRespawn()
end)
UserInputService.InputBegan:Connect(function(input, gameProcessedEvent)
if gameProcessedEvent then return end
if input.KeyCode == Enum.KeyCode.Space and featureStates.BhopHold then
getgenv().bhopHoldActive = true
checkBhopState()
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.KeyCode == Enum.KeyCode.Space then
getgenv().bhopHoldActive = false
end
end)
Players.PlayerRemoving:Connect(function(leavingPlayer)
if leavingPlayer == player then
unloadBhop()
if bhopKeyConnection then
bhopKeyConnection:Disconnect()
end
if characterConnection then
characterConnection:Disconnect()
end
end
end)
task.spawn(function()
task.wait(1)
if Options.BhopButtonToggle and Options.BhopButtonToggle.Value then
createBhopGradientButton()
end
end)
MiscTab:AddSection("Utilities")
local lagSwitchEnabled = false
local lagSwitchKeybindValue = "F12"
local lagDelayValue = 0.1
local lagIntensity = 1000000
local isLagActive = false
local function performMathLag()
local startTime = tick()
local duration = lagDelayValue
while tick() - startTime < duration do
for i = 1, lagIntensity do
local a = math.random(1, 1000000) * math.random(1, 1000000)
a = a / math.random(1, 10000)
local b = math.sqrt(math.random(1, 1000000))
b = b * math.pi * math.exp(1)
local c = math.sin(math.rad(math.random(1, 360))) * math.cos(math.rad(math.random(1, 360)))
end
end
end
local function toggleLagSwitch()
if not isLagActive then
isLagActive = true
task.spawn(function()
performMathLag()
isLagActive = false
end)
end
end
local function createLagSwitchButton()
local CoreGui = game:GetService("CoreGui")
local existingScreenGui = CoreGui:FindFirstChild("LagSwitchButtonGUI")
if existingScreenGui then
existingScreenGui:Destroy()
else
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "LagSwitchButtonGUI"
screenGui.ResetOnSpawn = false
screenGui.Parent = CoreGui
local buttonSize = 200
local btnWidth = math.max(150, math.min(buttonSize, 400))
local btnHeight = math.max(60, math.min(buttonSize * 0.4, 160))
local btn, clicker, stroke = createGradientButton(
screenGui,
UDim2.new(0.5, -btnWidth/2, 0.5, 1),
UDim2.new(0, btnWidth, 0, btnHeight),
"Lag Switch"
)
clicker.MouseButton1Click:Connect(function()
toggleLagSwitch()
end)
end
end
LagSwitchButtonToggle = MiscTab:AddToggle("LagSwitchButtonToggle", {
Title = "Lag Switch Button",
Default = false,
Callback = function(Value)
if Value then
createLagSwitchButton()
else
local CoreGui = game:GetService("CoreGui")
local existingScreenGui = CoreGui:FindFirstChild("LagSwitchButtonGUI")
if existingScreenGui then
existingScreenGui:Destroy()
end
end
end
})
LagSwitchKeybind = MiscTab:AddKeybind("LagSwitchKeybind", {
Title = "Lag Switch Keybind",
Mode = "Toggle",
Default = "F12",
ChangedCallback = function(New)
lagSwitchKeybindValue = New
local CoreGui = game:GetService("CoreGui")
local screenGui = CoreGui:FindFirstChild("LagSwitchButtonGUI")
if screenGui then
local button = screenGui:FindFirstChild("GradientBtn")
if button and button:FindFirstChild("TextLabel") then
button.TextLabel.Text = "Lag Switch"
end
end
end,
Callback = function()
toggleLagSwitch()
end
})
LagDelayInput = MiscTab:AddInput("LagDelayInput", {
Title = "Lag Delay (Seconds)",
Default = "0.1",
Placeholder = "Enter delay in seconds",
Numeric = true,
Finished = false,
Callback = function(Value)
local num = tonumber(Value)
if num and num > 0 and num <= 5 then
lagDelayValue = num
end
end
})
LagIntensityInput = MiscTab:AddInput("LagIntensityInput", {
Title = "Lag Intensity",
Default = "1000000",
Placeholder = "Enter intensity (1000-10000000)",
Numeric = true,
Finished = false,
Callback = function(Value)
local num = tonumber(Value)
if num and num >= 1000 and num <= 10000000 then
lagIntensity = num
end
end
})
TriggerLagSwitchButton = MiscTab:AddButton({
Title = "Trigger Lag Switch",
Callback = function()
toggleLagSwitch()
end
})
LagSwitchKeybind:OnChanged(function()
if Options.LagSwitchButtonToggle and Options.LagSwitchButtonToggle.Value then
local CoreGui = game:GetService("CoreGui")
local screenGui = CoreGui:FindFirstChild("LagSwitchButtonGUI")
if screenGui then
local button = screenGui:FindFirstChild("GradientBtn")
if button and button:FindFirstChild("TextLabel") then
button.TextLabel.Text = "Lag Switch"
end
end
end
end)
LagSwitchScaleInput = MiscTab:AddInput("LagSwitchScaleInput", {
Title = "Lag Switch Button Scale",
Default = "1.0",
Numeric = true,
Finished = false,
Callback = function(Value)
if Value and tonumber(Value) then
local scale = tonumber(Value)
local CoreGui = game:GetService("CoreGui")
local existingScreenGui = CoreGui:FindFirstChild("LagSwitchButtonGUI")
if existingScreenGui then
local button = existingScreenGui:FindFirstChild("GradientBtn")
if button then
local uiScale = button:FindFirstChild("UIScale") or Instance.new("UIScale")
uiScale.Scale = math.max(0.5, math.min(scale, 3.0))
uiScale.Parent = button
end
end
end
end
})
MiscTab:AddSection("Camera Adjustments")
local cameraStretchConnection = nil
local stretchHorizontal = 0.80
local stretchVertical = 0.80
local function setupCameraStretch()
if cameraStretchConnection then
cameraStretchConnection:Disconnect()
cameraStretchConnection = nil
end
cameraStretchConnection = game:GetService("RunService").RenderStepped:Connect(function()
local Camera = workspace.CurrentCamera
if Camera then
Camera.CFrame = Camera.CFrame * CFrame.new(0, 0, 0, stretchHorizontal, 0, 0, 0, stretchVertical, 0, 0, 0, 1)
end
end)
end
CameraStretchToggle = MiscTab:AddToggle("CameraStretchToggle", {
Title = "Camera Stretch",
Default = false,
Callback = function(Value)
if Value then
setupCameraStretch()
else
if cameraStretchConnection then
cameraStretchConnection:Disconnect()
cameraStretchConnection = nil
end
end
end
})
CameraStretchHorizontalInput = MiscTab:AddInput("CameraStretchHorizontalInput", {
Title = "Camera Stretch Horizontal",
Default = "0.80",
Placeholder = "Enter horizontal stretch value",
Numeric = true,
Finished = false,
Callback = function(Value)
local num = tonumber(Value)
if num then
stretchHorizontal = num
if Options.CameraStretchToggle and Options.CameraStretchToggle.Value then
setupCameraStretch()
end
end
end
})
CameraStretchVerticalInput = MiscTab:AddInput("CameraStretchVerticalInput", {
Title = "Camera Stretch Vertical",
Default = "0.80",
Placeholder = "Enter vertical stretch value",
Numeric = true,
Finished = false,
Callback = function(Value)
local num = tonumber(Value)
if num then
stretchVertical = num
if Options.CameraStretchToggle and Options.CameraStretchToggle.Value then
setupCameraStretch()
end
end
end
})
MiscTab:AddSection("Client Modification")
FullBrightToggle = MiscTab:AddToggle("FullBrightToggle", {
Title = "Full Bright",
Default = false,
Callback = function(state)
featureStates.FullBright = state
if state then
local Lighting = game:GetService("Lighting")
featureStates.originalBrightness = Lighting.Brightness
featureStates.originalAmbient = Lighting.Ambient
featureStates.originalOutdoorAmbient = Lighting.OutdoorAmbient
featureStates.originalColorShiftBottom = Lighting.ColorShift_Bottom
featureStates.originalColorShiftTop = Lighting.ColorShift_Top
local function applyFullBright()
if Lighting.Brightness ~= 1 then
Lighting.Brightness = 1
end
if Lighting.Ambient ~= Color3.new(1, 1, 1) then
Lighting.Ambient = Color3.new(1, 1, 1)
end
if Lighting.OutdoorAmbient ~= Color3.new(1, 1, 1) then
Lighting.OutdoorAmbient = Color3.new(1, 1, 1)
end
if Lighting.ColorShift_Bottom ~= Color3.new(1, 1, 1) then
Lighting.ColorShift_Bottom = Color3.new(1, 1, 1)
end
if Lighting.ColorShift_Top ~= Color3.new(1, 1, 1) then
Lighting.ColorShift_Top = Color3.new(1, 1, 1)
end
end
applyFullBright()
if featureStates.fullBrightConnection then
featureStates.fullBrightConnection:Disconnect()
end
featureStates.fullBrightConnection = RunService.Heartbeat:Connect(function()
if featureStates.FullBright then
applyFullBright()
end
end)
featureStates.fullBrightCharConnection = game.Players.LocalPlayer.CharacterAdded:Connect(function()
task.wait(1)
if featureStates.FullBright then
applyFullBright()
end
end)
else
if featureStates.fullBrightConnection then
featureStates.fullBrightConnection:Disconnect()
featureStates.fullBrightConnection = nil
end
if featureStates.fullBrightCharConnection then
featureStates.fullBrightCharConnection:Disconnect()
featureStates.fullBrightCharConnection = nil
end
if featureStates.originalBrightness then
local Lighting = game:GetService("Lighting")
Lighting.Brightness = featureStates.originalBrightness
Lighting.Ambient = featureStates.originalAmbient
Lighting.OutdoorAmbient = featureStates.originalOutdoorAmbient
Lighting.ColorShift_Bottom = featureStates.originalColorShiftBottom
Lighting.ColorShift_Top = featureStates.originalColorShiftTop
end
end
end
})
AntiLag1 = MiscTab:AddButton({
Title = "Anti lag 1",
Callback = function()
local Lighting = game:GetService("Lighting")
local Terrain = workspace:FindFirstChildOfClass("Terrain")
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
Lighting.GlobalShadows = false
Lighting.FogEnd = 1e10
Lighting.Brightness = 1
if Terrain then
Terrain.WaterWaveSize = 0
Terrain.WaterWaveSpeed = 0
Terrain.WaterReflectance = 0
Terrain.WaterTransparency = 1
end
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("BasePart") then
obj.Material = Enum.Material.Plastic
obj.Reflectance = 0
elseif obj:IsA("Decal") or obj:IsA("Texture") then
obj:Destroy()
elseif obj:IsA("ParticleEmitter") or obj:IsA("Trail") then
obj:Destroy()
elseif obj:IsA("PointLight") or obj:IsA("SpotLight") or obj:IsA("SurfaceLight") then
obj:Destroy()
end
end
for _, player in ipairs(Players:GetPlayers()) do
local char = player.Character
if char then
for _, part in ipairs(char:GetDescendants()) do
if part:IsA("Accessory") or part:IsA("Clothing") then
part:Destroy()
end
end
end
end
end
})
AntiLag2 = MiscTab:AddButton({
Title = "Anti lag 2",
Callback = function()
local ToDisable = {
Textures = true,
VisualEffects = true,
Parts = true,
Particles = true,
Sky = true
}
local ToEnable = {
FullBright = false
}
local Stuff = {}
for _, v in next, game:GetDescendants() do
if ToDisable.Parts then
if v:IsA("Part") or v:IsA("UnionOperation") or v:IsA("BasePart") then
v.Material = Enum.Material.SmoothPlastic
table.insert(Stuff, 1, v)
end
end
if ToDisable.Particles then
if v:IsA("ParticleEmitter") or v:IsA("Smoke") or v:IsA("Explosion") or v:IsA("Sparkles") or v:IsA("Fire") then
v.Enabled = false
table.insert(Stuff, 1, v)
end
end
if ToDisable.VisualEffects then
if v:IsA("BloomEffect") or v:IsA("BlurEffect") or v:IsA("DepthOfFieldEffect") or v:IsA("SunRaysEffect") then
v.Enabled = false
table.insert(Stuff, 1, v)
end
end
if ToDisable.Textures then
if v:IsA("Decal") or v:IsA("Texture") then
v.Texture = ""
table.insert(Stuff, 1, v)
end
end
if ToDisable.Sky then
if v:IsA("Sky") then
v.Parent = nil
table.insert(Stuff, 1, v)
end
end
end
if ToEnable.FullBright then
local Lighting = game:GetService("Lighting")
Lighting.FogColor = Color3.fromRGB(255, 255, 255)
Lighting.FogEnd = math.huge
Lighting.FogStart = math.huge
Lighting.Ambient = Color3.fromRGB(255, 255, 255)
Lighting.Brightness = 5
Lighting.ColorShift_Bottom = Color3.fromRGB(255, 255, 255)
Lighting.ColorShift_Top = Color3.fromRGB(255, 255, 255)
Lighting.OutdoorAmbient = Color3.fromRGB(255, 255, 255)
Lighting.Outlines = true
end
end
})
AntiLag3 = MiscTab:AddButton({
Title = "Remove Texture",
Callback = function()
for _, part in ipairs(workspace:GetDescendants()) do
if part:IsA("Part") or part:IsA("MeshPart") or part:IsA("UnionOperation") or part:IsA("WedgePart") or part:IsA("CornerWedgePart") then
if part:IsA("Part") then
part.Material = Enum.Material.SmoothPlastic
end
if part:FindFirstChildWhichIsA("Texture") then
local texture = part:FindFirstChildWhichIsA("Texture")
texture.Texture = "rbxassetid://0"
end
if part:FindFirstChildWhichIsA("Decal") then
local decal = part:FindFirstChildWhichIsA("Decal")
decal.Texture = "rbxassetid://0"
end
end
end
end
})
NoFogToggle = MiscTab:AddToggle("NoFogToggle", {
Title = "Remove fog",
Default = false,
Callback = function(state)
local Lighting = game:GetService("Lighting")
if state then
featureStates.originalFogEnd = Lighting.FogEnd
featureStates.originalAtmospheres = {}
for _, atmosphere in ipairs(Lighting:GetChildren()) do
if atmosphere:IsA("Atmosphere") then
table.insert(featureStates.originalAtmospheres, atmosphere:Clone())
end
end
Lighting.FogEnd = 1000000
for _, v in pairs(Lighting:GetDescendants()) do
if v:IsA("Atmosphere") then
v:Destroy()
end
end
else
if featureStates.originalFogEnd then
Lighting.FogEnd = featureStates.originalFogEnd
end
if featureStates.originalAtmospheres then
for _, atmosphere in ipairs(featureStates.originalAtmospheres) do
if not atmosphere.Parent then
local newAtmosphere = Instance.new("Atmosphere")
for _, prop in pairs({"Density", "Offset", "Color", "Decay", "Glare", "Haze"}) do
if atmosphere[prop] then
newAtmosphere[prop] = atmosphere[prop]
end
end
newAtmosphere.Parent = Lighting
end
end
end
end
end
})
VisualsTab = Window:AddTab({ Title = "Visuals", Icon = "star" })
VisualsTab:AddSection("Cosmetics Changer")
cosmetic1 = ""
cosmetic2 = ""
originalCosmetic1 = ""
originalCosmetic2 = ""
isSwapped = false
CurrentCosmeticsInput = VisualsTab:AddInput("CurrentCosmeticsInput", {
Title = "Current Cosmetics",
Default = "",
Placeholder = "Enter current cosmetic name",
Finished = false,
Callback = function(Value)
cosmetic1 = Value
if not isSwapped then
originalCosmetic1 = Value
end
end
})
SelectCosmeticsInput = VisualsTab:AddInput("SelectCosmeticsInput", {
Title = "Select Cosmetics",
Default = "",
Placeholder = "Enter cosmetic to swap with",
Finished = false,
Callback = function(Value)
cosmetic2 = Value
if not isSwapped then
originalCosmetic2 = Value
end
end
})
ApplyCosmeticsButton = VisualsTab:AddButton({
Title = "Apply Cosmetics",
Callback = function()
pcall(function()
if cosmetic1 == "" or cosmetic2 == "" or cosmetic1 == cosmetic2 then return end
ReplicatedStorage = game:GetService("ReplicatedStorage")
Cosmetics = ReplicatedStorage:WaitForChild("Items"):WaitForChild("Cosmetics")
function normalize(str)
return str:gsub("%s+", ""):lower()
end
function levenshtein(s, t)
m = #s
n = #t
d = {}
for i = 0, m do d[i] = {[0] = i} end
for j = 0, n do d[0][j] = j end
for i = 1, m do
for j = 1, n do
cost = (s:sub(i,i) == t:sub(j,j)) and 0 or 1
d[i][j] = math.min(
d[i-1][j] + 1,
d[i][j-1] + 1,
d[i-1][j-1] + cost
)
end
end
return d[m][n]
end
function similarity(s, t)
nS = normalize(s)
nT = normalize(t)
dist = levenshtein(nS, nT)
return 1 - dist / math.max(#nS, #nT)
end
function findSimilar(name)
bestMatch = name
bestScore = 0.5
for _, c in ipairs(Cosmetics:GetChildren()) do
score = similarity(name, c.Name)
if score > bestScore then
bestScore = score
bestMatch = c.Name
end
end
return bestMatch
end
cosmetic1 = findSimilar(cosmetic1)
cosmetic2 = findSimilar(cosmetic2)
a = Cosmetics:FindFirstChild(cosmetic1)
b = Cosmetics:FindFirstChild(cosmetic2)
if not a or not b then return end
if not isSwapped then
originalCosmetic1 = cosmetic1
originalCosmetic2 = cosmetic2
end
tempRoot = Instance.new("Folder", Cosmetics)
tempRoot.Name = "__temp_swap_" .. tostring(tick()):gsub("%.", "_")
tempA = Instance.new("Folder", tempRoot)
tempB = Instance.new("Folder", tempRoot)
for _, c in ipairs(a:GetChildren()) do c.Parent = tempA end
for _, c in ipairs(b:GetChildren()) do c.Parent = tempB end
for _, c in ipairs(tempA:GetChildren()) do c.Parent = b end
for _, c in ipairs(tempB:GetChildren()) do c.Parent = a end
tempRoot:Destroy()
isSwapped = true
Fluent:Notify({
Title = "Cosmetics Changer",
Content = "Successfully swapped " .. cosmetic1 .. " with " .. cosmetic2,
Duration = 3
})
end)
end
})
ResetCosmeticsButton = VisualsTab:AddButton({
Title = "Reset Cosmetics",
Callback = function()
pcall(function()
if not isSwapped then
Fluent:Notify({
Title = "Cosmetics Changer",
Content = "No cosmetics have been swapped yet",
Duration = 3
})
return
end
if originalCosmetic1 == "" or originalCosmetic2 == "" then
Fluent:Notify({
Title = "Cosmetics Changer",
Content = "Original cosmetic names not found",
Duration = 3
})
return
end
ReplicatedStorage = game:GetService("ReplicatedStorage")
Cosmetics = ReplicatedStorage:WaitForChild("Items"):WaitForChild("Cosmetics")
function normalize(str)
return str:gsub("%s+", ""):lower()
end
function findSimilar(name)
bestMatch = name
bestScore = 0.5
for _, c in ipairs(Cosmetics:GetChildren()) do
normalizedInput = normalize(name)
normalizedCosmetic = normalize(c.Name)
if normalizedInput == normalizedCosmetic then
return c.Name
end
end
return name
end
resetCosmetic1 = findSimilar(originalCosmetic1)
resetCosmetic2 = findSimilar(originalCosmetic2)
a = Cosmetics:FindFirstChild(cosmetic1)
b = Cosmetics:FindFirstChild(cosmetic2)
if a and b then
tempRoot = Instance.new("Folder", Cosmetics)
tempRoot.Name = "__temp_reset_" .. tostring(tick()):gsub("%.", "_")
tempA = Instance.new("Folder", tempRoot)
tempB = Instance.new("Folder", tempRoot)
for _, c in ipairs(a:GetChildren()) do c.Parent = tempA end
for _, c in ipairs(b:GetChildren()) do c.Parent = tempB end
for _, c in ipairs(tempA:GetChildren()) do c.Parent = b end
for _, c in ipairs(tempB:GetChildren()) do c.Parent = a end
tempRoot:Destroy()
isSwapped = false
Fluent:Notify({
Title = "Cosmetics Changer",
Content = "Successfully reset cosmetics to original state",
Duration = 3
})
else
Fluent:Notify({
Title = "Cosmetics Changer",
Content = "Could not find swapped cosmetics to reset",
Duration = 3
})
end
end)
end
})
VisualsTab:AddSection("CarryAnimation Replacer")
currentCarryAnim = ""
selectedCarryAnim = ""
lastCurrentCarryAnim = ""
lastSelectedCarryAnim = ""
isSwapped = false
function normalizeString(str)
return str:gsub("%s+", ""):lower()
end
function isValidCarryAnimation(name)
carryAnimations = game:GetService("ReplicatedStorage"):FindFirstChild("Items")
if not carryAnimations then return false end
carryAnimations = carryAnimations:FindFirstChild("CarryAnimations")
if not carryAnimations then return false end
normalizedInput = normalizeString(name)
for _, anim in ipairs(carryAnimations:GetChildren()) do
if normalizeString(anim.Name) == normalizedInput then
return true, anim.Name
end
end
return false
end
function revertPreviousSwap()
if lastCurrentCarryAnim ~= "" and lastSelectedCarryAnim ~= "" and isSwapped then
carryAnimations = game:GetService("ReplicatedStorage"):FindFirstChild("Items")
if carryAnimations then
carryAnimations = carryAnimations:FindFirstChild("CarryAnimations")
if carryAnimations then
lastCurrentValid, lastCurrentActual = isValidCarryAnimation(lastCurrentCarryAnim)
lastSelectedValid, lastSelectedActual = isValidCarryAnimation(lastSelectedCarryAnim)
if lastCurrentValid and lastSelectedValid then
pcall(function()
currentFolder = carryAnimations:FindFirstChild(lastCurrentActual)
selectedFolder = carryAnimations:FindFirstChild(lastSelectedActual)
if currentFolder and selectedFolder then
tempRoot = Instance.new("Folder")
tempRoot.Name = "__temp_revert_swap_" .. tostring(tick()):gsub("%.", "_")
tempRoot.Parent = carryAnimations
tempCurrent = Instance.new("Folder")
tempCurrent.Name = "tempCurrent"
tempCurrent.Parent = tempRoot
tempSelected = Instance.new("Folder")
tempSelected.Name = "tempSelected"
tempSelected.Parent = tempRoot
for _, child in ipairs(currentFolder:GetChildren()) do
child.Parent = tempCurrent
end
for _, child in ipairs(selectedFolder:GetChildren()) do
child.Parent = tempSelected
end
for _, child in ipairs(tempCurrent:GetChildren()) do
child.Parent = selectedFolder
end
for _, child in ipairs(tempSelected:GetChildren()) do
child.Parent = currentFolder
end
tempRoot:Destroy()
end
end)
end
end
end
isSwapped = false
end
end
CurrentCarryAnimInput = VisualsTab:AddInput("CurrentCarryAnimInput", {
Title = "Current CarryAnimation",
Default = "",
Placeholder = "Enter current carry animation name",
Finished = false,
Callback = function(Value)
if Value ~= currentCarryAnim and currentCarryAnim ~= "" then
revertPreviousSwap()
end
currentCarryAnim = Value
end
})
SelectedCarryAnimInput = VisualsTab:AddInput("SelectedCarryAnimInput", {
Title = "Selected CarryAnimation",
Default = "",
Placeholder = "Enter selected carry animation name",
Finished = false,
Callback = function(Value)
if Value ~= selectedCarryAnim and selectedCarryAnim ~= "" then
revertPreviousSwap()
end
selectedCarryAnim = Value
end
})
ApplyCarryAnimButton = VisualsTab:AddButton({
Title = "Apply CarryAnimation Swap",
Callback = function()
currentNorm = normalizeString(currentCarryAnim)
selectedNorm = normalizeString(selectedCarryAnim)
if currentNorm == "" or selectedNorm == "" then
Fluent:Notify({
Title = "CarryAnimation Replacer",
Content = "Both animation names must be filled",
Duration = 3
})
return
end
if currentNorm == selectedNorm then
Fluent:Notify({
Title = "CarryAnimation Replacer",
Content = "Animation names cannot be the same",
Duration = 3
})
return
end
carryAnimations = game:GetService("ReplicatedStorage"):FindFirstChild("Items")
if not carryAnimations then
Fluent:Notify({
Title = "CarryAnimation Replacer",
Content = "CarryAnimations folder not found",
Duration = 3
})
return
end
carryAnimations = carryAnimations:FindFirstChild("CarryAnimations")
if not carryAnimations then
Fluent:Notify({
Title = "CarryAnimation Replacer",
Content = "CarryAnimations folder not found",
Duration = 3
})
return
end
currentAnim, currentActualName = isValidCarryAnimation(currentCarryAnim)
selectedAnim, selectedActualName = isValidCarryAnimation(selectedCarryAnim)
if not currentAnim then
Fluent:Notify({
Title = "CarryAnimation Replacer",
Content = "Current animation not found: " .. currentCarryAnim,
Duration = 3
})
return
end
if not selectedAnim then
Fluent:Notify({
Title = "CarryAnimation Replacer",
Content = "Selected animation not found: " .. selectedCarryAnim,
Duration = 3
})
return
end
pcall(function()
revertPreviousSwap()
currentFolder = carryAnimations:FindFirstChild(currentActualName)
selectedFolder = carryAnimations:FindFirstChild(selectedActualName)
if not currentFolder or not selectedFolder then
Fluent:Notify({
Title = "CarryAnimation Replacer",
Content = "One or both animations not found in folder",
Duration = 3
})
return
end
tempRoot = Instance.new("Folder")
tempRoot.Name = "__temp_carry_swap_" .. tostring(tick()):gsub("%.", "_")
tempRoot.Parent = carryAnimations
tempCurrent = Instance.new("Folder")
tempCurrent.Name = "tempCurrent"
tempCurrent.Parent = tempRoot
tempSelected = Instance.new("Folder")
tempSelected.Name = "tempSelected"
tempSelected.Parent = tempRoot
for _, child in ipairs(currentFolder:GetChildren()) do
child.Parent = tempCurrent
end
for _, child in ipairs(selectedFolder:GetChildren()) do
child.Parent = tempSelected
end
for _, child in ipairs(tempCurrent:GetChildren()) do
child.Parent = selectedFolder
end
for _, child in ipairs(tempSelected:GetChildren()) do
child.Parent = currentFolder
end
tempRoot:Destroy()
lastCurrentCarryAnim = currentCarryAnim
lastSelectedCarryAnim = selectedCarryAnim
isSwapped = true
Fluent:Notify({
Title = "CarryAnimation Replacer",
Content = "Successfully swapped " .. currentActualName .. " with " .. selectedActualName,
Duration = 3
})
end)
end
})
ResetCarryAnimButton = VisualsTab:AddButton({
Title = "Reset All CarryAnimations",
Callback = function()
revertPreviousSwap()
currentCarryAnim = ""
selectedCarryAnim = ""
lastCurrentCarryAnim = ""
lastSelectedCarryAnim = ""
isSwapped = false
CurrentCarryAnimInput:SetValue("")
SelectedCarryAnimInput:SetValue("")
Fluent:Notify({
Title = "CarryAnimation Replacer",
Content = "All animations reset to original",
Duration = 3
})
end
})
VisualsTab:AddSection("NameTag Changers")
function updateNametagList()
nametagValues = {"Ignore", "None"}
nametagsFolder = game:GetService("ReplicatedStorage").Items.Nametags
if nametagsFolder then
for _, nametagModule in ipairs(nametagsFolder:GetChildren()) do
if nametagModule:IsA("ModuleScript") then
success, nametagData = pcall(require, nametagModule)
if success and nametagData and nametagData.AppearanceInfo then
table.insert(nametagValues, nametagData.AppearanceInfo.Name)
end
end
end
end
return nametagValues
end
VisualNametagDropdown = VisualsTab:AddDropdown("VisualNametagDropdown", {
Title = "Visual Nametag",
Description = "Select nametag appearance",
Values = updateNametagList(),
Multi = false,
Default = "Ignore",
Callback = function(Value)
playerFolder = workspace.Game.Players:FindFirstChild(game.Players.LocalPlayer.Name)
if playerFolder then
if Value == "None" then
playerFolder:SetAttribute("Nametag", nil)
elseif Value ~= "Ignore" then
cleanValue = Value:gsub("%s+", "")
playerFolder:SetAttribute("Nametag", cleanValue)
end
end
end
})
game.Players.LocalPlayer.CharacterAdded:Connect(function(character)
task.wait(1)
playerFolder = workspace.Game.Players:FindFirstChild(game.Players.LocalPlayer.Name)
if playerFolder and Options.VisualNametagDropdown and Options.VisualNametagDropdown.Value ~= "Ignore" then
if Options.VisualNametagDropdown.Value == "None" then
playerFolder:SetAttribute("Nametag", nil)
else
cleanValue = Options.VisualNametagDropdown.Value:gsub("%s+", "")
playerFolder:SetAttribute("Nametag", cleanValue)
end
end
end)
game:GetService("RunService").Heartbeat:Connect(function()
playerFolder = workspace.Game.Players:FindFirstChild(game.Players.LocalPlayer.Name)
if playerFolder and Options.VisualNametagDropdown and Options.VisualNametagDropdown.Value ~= "Ignore" then
if Options.VisualNametagDropdown.Value == "None" then
playerFolder:SetAttribute("Nametag", nil)
else
cleanValue = Options.VisualNametagDropdown.Value:gsub("%s+", "")
currentTag = playerFolder:GetAttribute("Nametag")
if currentTag ~= cleanValue then
playerFolder:SetAttribute("Nametag", cleanValue)
end
end
end
end)
VisualsTab:AddSection("Fake Streaks")
FakeStreaksInput = VisualsTab:AddInput("FakeStreaksInput", {
Title = "Fake Streaks",
Default = "",
Placeholder = "Enter streak value",
Numeric = true,
Finished = false,
Callback = function(Value)
num = tonumber(Value)
if num then
game:GetService("Players").LocalPlayer:SetAttribute("Streak", num)
end
end
})
task.spawn(function()
task.wait(1)
currentStreak = game:GetService("Players").LocalPlayer:GetAttribute("Streak")
if currentStreak then
FakeStreaksInput:SetValue(tostring(currentStreak))
end
end)
VisualsTab:AddSection("Emote Changer")
player = game:GetService("Players").LocalPlayer
ReplicatedStorage = game:GetService("ReplicatedStorage")
Events = ReplicatedStorage:WaitForChild("Events", 10)
CharacterFolder = Events and Events:WaitForChild("Character", 10)
EmoteRemote = CharacterFolder and CharacterFolder:WaitForChild("Emote", 10)
PassCharacterInfo = CharacterFolder and CharacterFolder:WaitForChild("PassCharacterInfo", 10)
remoteSignal = PassCharacterInfo and PassCharacterInfo.OnClientEvent
currentTag = nil
currentEmotes = {}
selectEmotes = {}
emoteEnabled = {}
currentEmoteInputs = {}
selectEmoteInputs = {}
for i = 1, 12 do
currentEmotes[i] = ""
selectEmotes[i] = ""
emoteEnabled[i] = false
end
function readTagFromFolder(f)
if not f then return nil end
tagAttribute = f:GetAttribute("Tag")
if tagAttribute ~= nil then
return tagAttribute
end
tagChild = f:FindFirstChild("Tag")
if tagChild and tagChild:IsA("ValueBase") then
return tagChild.Value
end
return nil
end
function onRespawn()
currentTag = nil
pendingSlot = nil
task.spawn(function()
startTime = tick()
while tick() - startTime < 10 do
if workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Players") then
playerFolder = workspace.Game.Players:FindFirstChild(player.Name)
if playerFolder then
currentTag = readTagFromFolder(playerFolder)
if currentTag then
tagNumber = tonumber(currentTag)
if tagNumber and tagNumber >= 0 and tagNumber <= 255 then
print("Emote Changer: Found tag", tagNumber)
break
else
currentTag = nil
end
end
end
end
task.wait(0.5)
end
if not currentTag then
print("Emote Changer: Could not find tag after 10 seconds")
end
end)
end
pendingSlot = nil
blockOriginalEmote = false
function fireSelect(slot)
if not currentTag then
print("Emote Changer: No current tag")
return
end
tagNumber = tonumber(currentTag)
if not tagNumber or tagNumber < 0 or tagNumber > 255 then
print("Emote Changer: Invalid tag number", tagNumber)
return
end
if not selectEmotes[slot] or selectEmotes[slot] == "" then
print("Emote Changer: No select emote for slot", slot)
return
end
print("Emote Changer: Firing emote", selectEmotes[slot], "for slot", slot, "tag", tagNumber)
if remoteSignal then
pcall(function()
buf = buffer.create(2)
buffer.writeu8(buf, 0, tagNumber)
buffer.writeu8(buf, 1, 17)
firesignal(remoteSignal, buf, {selectEmotes[slot]})
end)
else
print("Emote Changer: remoteSignal is nil")
end
end
if PassCharacterInfo and EmoteRemote then
print("Emote Changer: Setting up emote changer...")
PassCharacterInfo.OnClientEvent:Connect(function(...)
if not pendingSlot then return end
slot = pendingSlot
pendingSlot = nil
task.wait(0.1)
fireSelect(slot)
end)
success, oldNamecall = pcall(function()
oldNamecall = hookmetamethod(game, "__namecall", function(self, ...)
methodName = getnamecallmethod()
args = {...}
if methodName == "FireServer" and self == EmoteRemote and type(args[1]) == "string" then
print("Emote Changer: Detected emote fire:", args[1])
for i = 1, 12 do
if emoteEnabled[i] and currentEmotes[i] ~= "" and args[1] == currentEmotes[i] then
print("Emote Changer: Matched emote slot", i, args[1], "->", selectEmotes[i])
pendingSlot = i
blockOriginalEmote = true
task.spawn(function()
task.wait(0.1)
blockOriginalEmote = false
if pendingSlot == i then
pendingSlot = nil
fireSelect(i)
end
end)
if blockOriginalEmote then
print("Emote Changer: Blocking original emote")
return nil
end
end
end
end
return oldNamecall(self, ...)
end)
return oldNamecall
end)
if success then
print("Emote Changer: Hook installed successfully")
else
warn("Emote Changer: Error hooking __namecall:", oldNamecall)
end
if player.Character then
task.spawn(onRespawn)
end
player.CharacterAdded:Connect(function()
task.wait(1)
onRespawn()
end)
if workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Players") then
workspace.Game.Players.ChildAdded:Connect(function(child)
if child.Name == player.Name then
task.wait(0.5)
onRespawn()
end
end)
workspace.Game.Players.ChildRemoved:Connect(function(child)
if child.Name == player.Name then
currentTag = nil
pendingSlot = nil
end
end)
end
else
print("Emote Changer: Required remotes not found")
end
for i = 1, 12 do
currentEmoteInputs[i] = VisualsTab:AddInput("CurrentEmoteInput" .. i, {
Title = "Current Emote " .. i,
Default = "",
Placeholder = "Enter current emote name",
Finished = false,
Callback = function(Value)
currentEmotes[i] = Value:gsub("%s+", "")
print("Emote Changer: Set current emote " .. i .. " to: " .. currentEmotes[i])
end
})
end
VisualsTab:AddParagraph({ Title = "", Content = "" })
for i = 1, 12 do
selectEmoteInputs[i] = VisualsTab:AddInput("SelectEmoteInput" .. i, {
Title = "Select Emote " .. i,
Default = "",
Placeholder = "Enter select emote name",
Finished = false,
Callback = function(Value)
selectEmotes[i] = Value:gsub("%s+", "")
print("Emote Changer: Set select emote " .. i .. " to: " .. selectEmotes[i])
end
})
end
VisualsEmoteApply = VisualsTab:AddButton({
Title = "Apply Emote Mappings",
Callback = function()
hasAnyEmote = false
for i = 1, 12 do
if currentEmotes[i] ~= "" or selectEmotes[i] ~= "" then
hasAnyEmote = true
break
end
end
if not hasAnyEmote then
Fluent:Notify({
Title = "Emote Changer",
Content = "Please enter your emote",
Duration = 3
})
return
end
function normalizeEmoteName(name)
return name:gsub("%s+", ""):lower()
end
function isValidEmote(emoteName)
if emoteName == "" then return false, "" end
normalizedInput = normalizeEmoteName(emoteName)
ItemsFolder = game:GetService("ReplicatedStorage"):FindFirstChild("Items")
if ItemsFolder then
emotesFolder = ItemsFolder:FindFirstChild("Emotes")
if emotesFolder then
for _, emoteModule in ipairs(emotesFolder:GetChildren()) do
if emoteModule:IsA("ModuleScript") then
normalizedEmote = normalizeEmoteName(emoteModule.Name)
if normalizedEmote == normalizedInput then
return true, emoteModule.Name
end
end
end
end
end
return false, ""
end
sameEmoteSlots = {}
missingEmoteSlots = {}
invalidEmoteSlots = {}
successfulSlots = {}
for i = 1, 12 do
if currentEmotes[i] ~= "" and selectEmotes[i] ~= "" then
currentValid, currentActual = isValidEmote(currentEmotes[i])
selectValid, selectActual = isValidEmote(selectEmotes[i])
if not currentValid and not selectValid then
table.insert(invalidEmoteSlots, {slot = i, currentInvalid = true, currentName = currentEmotes[i], selectInvalid = true, selectName = selectEmotes[i]})
elseif not currentValid then
table.insert(invalidEmoteSlots, {slot = i, currentInvalid = true, currentName = currentEmotes[i], selectInvalid = false, selectName = selectEmotes[i]})
elseif not selectValid then
table.insert(invalidEmoteSlots, {slot = i, currentInvalid = false, currentName = currentEmotes[i], selectInvalid = true, selectName = selectEmotes[i]})
elseif currentActual:lower() == selectActual:lower() then
table.insert(sameEmoteSlots, i)
else
table.insert(successfulSlots, {slot = i, current = currentActual, select = selectActual})
end
elseif currentEmotes[i] ~= "" or selectEmotes[i] ~= "" then
table.insert(missingEmoteSlots, i)
end
end
message = ""
if #successfulSlots > 0 then
message = message .. "✓ Successfully applied emote on:\n"
for _, data in ipairs(successfulSlots) do
message = message .. "Slot " .. data.slot .. " Emote: " .. data.current .. " → " .. data.select .. "\n"
emoteEnabled[data.slot] = true
print("Emote Changer: Enabled slot", data.slot, data.current, "->", data.select)
end
message = message .. "\n"
end
if #sameEmoteSlots > 0 then
message = message .. "✗ Failed to apply emote on:\n"
for _, slot in ipairs(sameEmoteSlots) do
message = message .. "Slot " .. slot .. " - Cannot change emote with the same name\n"
emoteEnabled[slot] = false
end
message = message .. "\n"
end
if #invalidEmoteSlots > 0 then
message = message .. "✗ Failed to apply emote on:\n"
for _, data in ipairs(invalidEmoteSlots) do
message = message .. "Slot " .. data.slot .. " - "
if data.currentInvalid and data.selectInvalid then
message = message .. "Invalid current emote: \"" .. data.currentName .. "\", Invalid select emote: \"" .. data.selectName .. "\"\n"
elseif data.currentInvalid then
message = message .. "Invalid current emote: \"" .. data.currentName .. "\", Select emote: \"" .. data.selectName .. "\"\n"
else
message = message .. "Current emote: \"" .. data.currentName .. "\", Invalid select emote: \"" .. data.selectName .. "\"\n"
end
emoteEnabled[data.slot] = false
end
message = message .. "\n"
end
if #missingEmoteSlots > 0 then
message = message .. "✗ Failed to apply emote on:\n"
for _, slot in ipairs(missingEmoteSlots) do
if currentEmotes[slot] == "" then
message = message .. "Slot " .. slot .. " - Current emote slot is missing text\n"
else
message = message .. "Slot " .. slot .. " - Select emote slot is missing text\n"
end
emoteEnabled[slot] = false
end
end
Fluent:Notify({
Title = "Emote Changer",
Content = message,
Duration = 8
})
print("Emote Changer: Applied mappings")
print("Enabled slots:")
for i = 1, 12 do
if emoteEnabled[i] then
print("Slot " .. i .. ": " .. currentEmotes[i] .. " -> " .. selectEmotes[i])
end
end
end
})
VisualsEmoteReset = VisualsTab:AddButton({
Title = "Reset All Emotes",
Callback = function()
for i = 1, 12 do
currentEmotes[i] = ""
selectEmotes[i] = ""
emoteEnabled[i] = false
if currentEmoteInputs[i] then
currentEmoteInputs[i]:SetValue("")
end
if selectEmoteInputs[i] then
selectEmoteInputs[i]:SetValue("")
end
end
Fluent:Notify({
Title = "Emote Changer",
Content = "All emotes have been reset!",
Duration = 3
})
end
})
VisualsTab:AddSection("Emote Replacer (very buggy)")
EmoteReplacer = {
CurrentEmotes = {},
SelectedEmotes = {},
SwappedPairs = {},
InputFields = {}
}
for i = 1, 12 do
EmoteReplacer.CurrentEmotes[i] = ""
EmoteReplacer.SelectedEmotes[i] = ""
end
VisualsTab:AddParagraph({ Title = "This Script is for bad executor", Content = "" })
VisualsTab:AddParagraph({ Title = "Current Emotes", Content = "" })
for i = 1, 12 do
EmoteReplacer.InputFields["CurrentEmote" .. i] = VisualsTab:AddInput("CurrentEmote" .. i, {
Title = "Current Emote " .. i,
Default = "",
Placeholder = "Enter current emote name",
Finished = false,
Callback = function(Value)
EmoteReplacer.CurrentEmotes[i] = Value
end
})
end
VisualsTab:AddParagraph({ Title = "Selected Emotes", Content = "" })
for i = 1, 12 do
EmoteReplacer.InputFields["SelectedEmote" .. i] = VisualsTab:AddInput("SelectedEmote" .. i, {
Title = "Select Emote " .. i,
Default = "",
Placeholder = "Enter replacement emote name",
Finished = false,
Callback = function(Value)
EmoteReplacer.SelectedEmotes[i] = Value
end
})
end
function SwapEmoteNames(currentName, selectedName)
Items = game:GetService("ReplicatedStorage"):FindFirstChild("Items")
if not Items then
print("Emote Replacer: Items folder not found")
return false
end
EmotesFolder = Items:FindFirstChild("Emotes")
if not EmotesFolder then
print("Emote Replacer: Emotes folder not found")
return false
end
currentEmoteObj = EmotesFolder:FindFirstChild(currentName)
selectedEmoteObj = EmotesFolder:FindFirstChild(selectedName)
if currentEmoteObj and selectedEmoteObj then
tempName = selectedName .. "_EmoteSwapTemp"
while EmotesFolder:FindFirstChild(tempName) do
tempName = tempName .. "_"
end
currentEmoteObj.Name = tempName
selectedEmoteObj.Name = currentName
currentEmoteObj.Name = selectedName
print("Emote Replacer: Swapped", currentName, "with", selectedName)
return true
else
print("Emote Replacer: Could not find emotes:", currentName, "or", selectedName)
return false
end
end
function ResetEmoteNames()
Items = game:GetService("ReplicatedStorage"):FindFirstChild("Items")
if not Items then return false end
EmotesFolder = Items:FindFirstChild("Emotes")
if not EmotesFolder then return false end
for currentEmote, selectedEmote in pairs(EmoteReplacer.SwappedPairs) do
currentEmoteObj = EmotesFolder:FindFirstChild(selectedEmote)
selectedEmoteObj = EmotesFolder:FindFirstChild(currentEmote)
if currentEmoteObj and selectedEmoteObj then
tempName = currentEmote .. "_EmoteSwapTemp"
while EmotesFolder:FindFirstChild(tempName) do
tempName = tempName .. "_"
end
currentEmoteObj.Name = tempName
selectedEmoteObj.Name = selectedEmote
currentEmoteObj.Name = currentEmote
print("Emote Replacer: Reset", selectedEmote, "back to", currentEmote)
end
end
return true
end
EmoteSwapApplyButton = VisualsTab:AddButton({
Title = "Apply Emote Swap",
Callback = function()
swappedCount = 0
failedCount = 0
for i = 1, 12 do
currentEmote = EmoteReplacer.CurrentEmotes[i]
selectedEmote = EmoteReplacer.SelectedEmotes[i]
if currentEmote ~= "" and selectedEmote ~= "" then
if SwapEmoteNames(currentEmote, selectedEmote) then
EmoteReplacer.SwappedPairs[currentEmote] = selectedEmote
swappedCount = swappedCount + 1
else
failedCount = failedCount + 1
end
end
end
message = ""
if swappedCount > 0 then
message = "Successfully swapped " .. tostring(swappedCount) .. " emote(s)"
end
if failedCount > 0 then
if message ~= "" then message = message .. " | " end
message = message .. "Failed to swap " .. tostring(failedCount) .. " emote(s)"
end
if message == "" then
message = "No emotes specified to swap"
end
Fluent:Notify({
Title = "Emote Replacer",
Content = message,
Duration = 3
})
end
})
EmoteSwapResetButton = VisualsTab:AddButton({
Title = "Reset Emote Module",
Callback = function()
if ResetEmoteNames() then
EmoteReplacer.SwappedPairs = {}
for i = 1, 12 do
EmoteReplacer.CurrentEmotes[i] = ""
EmoteReplacer.SelectedEmotes[i] = ""
if EmoteReplacer.InputFields["CurrentEmote" .. i] then
EmoteReplacer.InputFields["CurrentEmote" .. i]:SetValue("")
end
if EmoteReplacer.InputFields["SelectedEmote" .. i] then
EmoteReplacer.InputFields["SelectedEmote" .. i]:SetValue("")
end
end
Fluent:Notify({
Title = "Emote Replacer",
Content = "All emotes have been restored to original names!",
Duration = 3
})
else
Fluent:Notify({
Title = "Emote Replacer",
Content = "Failed to reset emotes!",
Duration = 3
})
end
end
})
player.CharacterRemoving:Connect(function()
if next(EmoteReplacer.SwappedPairs) then
ResetEmoteNames()
end
end)
player.CharacterAdded:Connect(function(character)
task.wait(1)
if character:GetAttribute("Downed") then
return
end
if next(EmoteReplacer.SwappedPairs) then
for currentEmote, selectedEmote in pairs(EmoteReplacer.SwappedPairs) do
SwapEmoteNames(currentEmote, selectedEmote)
end
end
end)
local SettingsTab = Window:AddTab({ Title = "Settings", Icon = "settings" })
SettingsTab:AddSection("Configuration")
SettingsTab:AddButton({
Title = "Save Configuration",
Description = "Save current settings to config file",
Callback = function()
SaveManager:Save()
Fluent:Notify({
Title = "Settings",
Content = "Configuration saved successfully!",
Duration = 3
})
end
})
SettingsTab:AddButton({
Title = "Load Configuration",
Description = "Load settings from config file",
Callback = function()
SaveManager:Load()
Fluent:Notify({
Title = "Settings",
Content = "Configuration loaded successfully!",
Duration = 3
})
end
})
SettingsTab:AddButton({
Title = "Reset Configuration",
Description = "Reset all settings to default",
Callback = function()
Window:Dialog({
Title = "Reset Configuration",
Content = "Are you sure you want to reset all settings to default?",
Buttons = {
{
Title = "Confirm",
Callback = function()
SaveManager:Reset()
Fluent:Notify({
Title = "Settings",
Content = "Configuration reset to default!",
Duration = 3
})
end
},
{
Title = "Cancel",
Callback = function()
print("Reset cancelled.")
end
}
}
})
end
})
SettingsTab:AddParagraph({
Title = "Auto Load",
Content = "The configuration will automatically load when the script starts."
})
SettingsTab:AddSection("Interface Manager")
InterfaceManager:SetLibrary(Fluent)
InterfaceManager:SetFolder("DraconicXEvade")
InterfaceManager:BuildInterfaceSection(SettingsTab)
SettingsTab:AddSection("Save Manager")
SaveManager:SetLibrary(Fluent)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({})
SaveManager:SetFolder("DraconicXEvade/Config")
SaveManager:BuildConfigSection(SettingsTab)
task.spawn(function()
task.wait(1)
SaveManager:LoadAutoloadConfig()
end)
Window:SelectTab(1)
SaveManager:LoadAutoloadConfig()
loadstring(game:HttpGet('https://raw.githubusercontent.com/Pnsdgsa/Script-kids/refs/heads/main/Scripthub/Darahub/evade/TimerGUI-NoRepeat'))()No comments yet for this script.



