
KeylessUniversal

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local Workspace = game:GetService("Workspace")
local VirtualUser = game:GetService("VirtualUser")
local TweenService = game:GetService("TweenService")
local _S = {}
local player = Players.LocalPlayer
local mouse = player:GetMouse()
local camera = Workspace.CurrentCamera
-- tat
_S.espEnabled = false
_S.speedEnabled = false
_S.flyEnabled = false
_S.spectatingPlayer = nil
_S.selectedPlayer = nil
_S.speedValue = 100
_S.flySpeed = 60
_S.flyVelocity = nil
_S.flyGyro = nil
_S.swimEnabled = false
_S.swimSpeed = 50
_S.swimVelocity = nil
_S.swimGyro = nil
local keys = {}
_S.espObjects = {}
_S.teleportToolEquipped = false
_S.noclipEnabled = false
_S.spinEnabled = false
_S.spinSpeed = 50
_S.afkEnabled = false
_S.afkStartTime = 0
_S.afkTimerGui = nil
_S.afkTimerLabel = nil
_S.lockAllEnabled = false
_S.lockSelectedEnabled = false
_S.lockEnemyEnabled = false
_S.lockRanges = { all = math.huge, sel = math.huge, enemy = math.huge } -- range max en studs pour chaque lock
_S.lockProximityRange = 15 -- Auto-lock quand un joueur est très proche (en studs)
_S.damageAutoLockTarget = nil -- Joueur ciblé après avoir pris des dégâts
_S.damageAutoLockExpire = 0 -- Timestamp d'expiration du lock de dégâts
_S.infiniteJumpEnabled = false
_S.tpAllActive = false
_S.tpSavePosEnabled = false
_S.tpSaveSimpleEnabled = false
_S.tpSaveAutoPosition = nil
_S.tpSaveInterval = 1
_S.xrayEnabled = false
_S.xraySavedTransparency = {}
_S.nightVisionEnabled = false
_S.nightVisionSavedLighting = {}
_S.savedBillboards = {}
-- Tracking pour le script Omega
_S.omegaRenderStepNames = {}
_S.omegaConnections = {}
_S.omegaGuiSnapshot = {}
_S.omegaCoreGuiSnapshot = {}
_S.omegaCreatedInstances = {}
_S.omegaForceResetConn = nil
_S.rightMouseHeld = false
_S.omegaThreads = {}
_S.omegaKilled = false
_S.omegaCleanupGeneration = 0
_S.omegaHasExecuted = false
_S.omegaHiddenStates = {}
-- Forward declarations
local stopSpectate
local addBtnSound
local makeToggle
local spectateCharConn = nil
local updateVolLabel
local applySpeed
local updateScale
-- Helper: bouton styl
local function btn(parent, text, pos, size, color)
local b = Instance.new("TextButton")
b.Size = size or UDim2.new(0.245, -2, 0, 20)
b.Position = pos
b.BackgroundColor3 = _S.customBtnColor or Color3.fromRGB(120, 30, 30)
_S.allButtons = _S.allButtons or {}
table.insert(_S.allButtons, b)
b.BackgroundTransparency = 0
b.Text = text
b.TextColor3 = Color3.fromRGB(255, 255, 255)
b.Font = Enum.Font.SourceSans
b.TextSize = 14
b.TextTruncate = Enum.TextTruncate.AtEnd
b.BorderSizePixel = 0
b.Parent = parent
Instance.new("UICorner", b).CornerRadius = UDim.new(0, 4)
if addBtnSound then addBtnSound(b) end
return b
end
-- === GUI ===
local gui = Instance.new("ScreenGui")
gui.Name = "REDTIGER"
gui.ResetOnSpawn = false
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.DisplayOrder = 999999
gui.Parent = player:WaitForChild("PlayerGui")
-- Sons UI (popup stylish)
local hoverSound = Instance.new("Sound")
hoverSound.SoundId = "rbxassetid://88442833509532"
hoverSound.Volume = 0.3
hoverSound.Parent = gui
local clickSound = Instance.new("Sound")
clickSound.SoundId = "rbxassetid://88442833509532"
clickSound.Volume = 0.6
clickSound.PlaybackSpeed = 1.4
clickSound.Parent = gui
-- AFK Timer display (top-left corner)
_S.afkTimerGui = Instance.new("ScreenGui")
_S.afkTimerGui.Name = "AFKTimer"
_S.afkTimerGui.ResetOnSpawn = false
_S.afkTimerGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
_S.afkTimerGui.DisplayOrder = 999998
_S.afkTimerGui.Parent = player:WaitForChild("PlayerGui")
local afkTimerFrame = Instance.new("Frame")
afkTimerFrame.Size = UDim2.new(0, 260, 0, 80)
afkTimerFrame.Position = UDim2.new(0, 15, 0, 15)
afkTimerFrame.BackgroundColor3 = Color3.fromRGB(15, 15, 25)
afkTimerFrame.BackgroundTransparency = 0.05
afkTimerFrame.Visible = false
afkTimerFrame.Parent = _S.afkTimerGui
local afkTimerCorner = Instance.new("UICorner")
afkTimerCorner.CornerRadius = UDim.new(0, 12)
afkTimerCorner.Parent = afkTimerFrame
local afkTimerStroke = Instance.new("UIStroke")
afkTimerStroke.Color = Color3.fromRGB(100, 255, 130)
afkTimerStroke.Thickness = 2
afkTimerStroke.Transparency = 0.3
afkTimerStroke.Parent = afkTimerFrame
local afkTimerGrad = Instance.new("UIGradient")
afkTimerGrad.Color = ColorSequence.new(Color3.fromRGB(20, 30, 25), Color3.fromRGB(10, 15, 12))
afkTimerGrad.Rotation = 90
afkTimerGrad.Parent = afkTimerFrame
local afkTimerPad = Instance.new("UIPadding")
afkTimerPad.PaddingLeft = UDim.new(0, 12)
afkTimerPad.PaddingRight = UDim.new(0, 12)
afkTimerPad.PaddingTop = UDim.new(0, 8)
afkTimerPad.PaddingBottom = UDim.new(0, 8)
afkTimerPad.Parent = afkTimerFrame
local afkIconLabel = Instance.new("TextLabel")
afkIconLabel.Size = UDim2.new(0, 36, 0, 36)
afkIconLabel.Position = UDim2.new(0, 0, 0, 14)
afkIconLabel.BackgroundTransparency = 1
afkIconLabel.Text = "⏰"
afkIconLabel.TextColor3 = Color3.fromRGB(100, 255, 130)
afkIconLabel.Font = Enum.Font.SourceSansBold
afkIconLabel.TextSize = 28
afkIconLabel.TextXAlignment = Enum.TextXAlignment.Center
afkIconLabel.TextYAlignment = Enum.TextYAlignment.Center
afkIconLabel.Parent = afkTimerFrame
_S.afkTimerLabel = Instance.new("TextLabel")
_S.afkTimerLabel.Size = UDim2.new(1, -44, 0, 30)
_S.afkTimerLabel.Position = UDim2.new(0, 40, 0, 8)
_S.afkTimerLabel.BackgroundTransparency = 1
_S.afkTimerLabel.Text = "AFK: 00:00:00"
_S.afkTimerLabel.TextColor3 = Color3.fromRGB(100, 255, 130)
_S.afkTimerLabel.Font = Enum.Font.SourceSansBold
_S.afkTimerLabel.TextSize = 22
_S.afkTimerLabel.TextXAlignment = Enum.TextXAlignment.Left
_S.afkTimerLabel.TextYAlignment = Enum.TextYAlignment.Center
_S.afkTimerLabel.Parent = afkTimerFrame
local afkStatusLabel = Instance.new("TextLabel")
afkStatusLabel.Size = UDim2.new(1, -44, 0, 16)
afkStatusLabel.Position = UDim2.new(0, 40, 0, 42)
afkStatusLabel.BackgroundTransparency = 1
afkStatusLabel.Text = "Anti-Kick Active"
afkStatusLabel.TextColor3 = Color3.fromRGB(120, 120, 140)
afkStatusLabel.Font = Enum.Font.SourceSans
afkStatusLabel.TextSize = 13
afkStatusLabel.TextXAlignment = Enum.TextXAlignment.Left
afkStatusLabel.TextYAlignment = Enum.TextYAlignment.Center
afkStatusLabel.Parent = afkTimerFrame
addBtnSound = function(b)
b.MouseEnter:Connect(function()
hoverSound:Play()
end)
b.MouseButton1Click:Connect(function()
clickSound:Play()
end)
end
-- Indicateur toggle: carré avec croix (activé) / sans croix (désactivé)
makeToggle = function(button, label)
button.Text = label
local switchTrack = Instance.new("Frame")
switchTrack.Size = UDim2.new(0, 32, 0, 16)
switchTrack.Position = UDim2.new(1, -38, 0.5, -8)
switchTrack.BackgroundColor3 = Color3.fromRGB(40, 40, 45)
switchTrack.BorderSizePixel = 0
switchTrack.Parent = button
Instance.new("UICorner", switchTrack).CornerRadius = UDim.new(1, 0)
local stroke = Instance.new("UIStroke")
stroke.Color = Color3.fromRGB(80, 80, 90)
stroke.Thickness = 1
stroke.Parent = switchTrack
local switchKnob = Instance.new("Frame")
switchKnob.Size = UDim2.new(0, 12, 0, 12)
switchKnob.Position = UDim2.new(0, 2, 0.5, -6)
switchKnob.BackgroundColor3 = Color3.fromRGB(200, 200, 200)
switchKnob.BorderSizePixel = 0
switchKnob.Parent = switchTrack
Instance.new("UICorner", switchKnob).CornerRadius = UDim.new(1, 0)
local TweenService = game:GetService("TweenService")
return function(enabled)
if enabled then
TweenService:Create(switchTrack, TweenInfo.new(0.15), {BackgroundColor3 = Color3.fromRGB(20, 120, 50)}):Play()
TweenService:Create(switchKnob, TweenInfo.new(0.15), {Position = UDim2.new(1, -14, 0.5, -6), BackgroundColor3 = Color3.fromRGB(80, 220, 100)}):Play()
stroke.Color = Color3.fromRGB(50, 200, 80)
else
TweenService:Create(switchTrack, TweenInfo.new(0.15), {BackgroundColor3 = Color3.fromRGB(40, 40, 45)}):Play()
TweenService:Create(switchKnob, TweenInfo.new(0.15), {Position = UDim2.new(0, 2, 0.5, -6), BackgroundColor3 = Color3.fromRGB(200, 200, 200)}):Play()
stroke.Color = Color3.fromRGB(80, 80, 90)
end
end
end
-- Panneau principal (opaque noir)
local panel = Instance.new("Frame")
panel.Size = UDim2.new(0, 340, 0, 350)
panel.Position = UDim2.new(0, 20, 0.5, -175)
panel.BackgroundColor3 = Color3.fromRGB(8, 8, 12)
panel.BackgroundTransparency = 0
panel.BorderSizePixel = 0
panel.Visible = false
panel.ClipsDescendants = true
panel.Parent = gui
Instance.new("UICorner", panel).CornerRadius = UDim.new(0, 10)
-- Barre de titre
local titleBar = Instance.new("Frame")
titleBar.Size = UDim2.new(1, 0, 0, 26)
titleBar.BackgroundColor3 = Color3.fromRGB(18, 18, 28)
titleBar.BackgroundTransparency = 0
titleBar.BorderSizePixel = 0
titleBar.Parent = panel
Instance.new("UICorner", titleBar).CornerRadius = UDim.new(0, 10)
do
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -40, 1, 0)
title.Position = UDim2.new(0, 10, 0, 0)
title.BackgroundTransparency = 1
title.Text = "REDTIGER"
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.Font = Enum.Font.SourceSansBold
title.TextSize = 16
title.TextXAlignment = Enum.TextXAlignment.Left
title.Parent = titleBar
end
local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 22, 0, 22)
closeBtn.Position = UDim2.new(1, -25, 0, 2)
closeBtn.BackgroundColor3 = Color3.fromRGB(180, 40, 40)
closeBtn.BackgroundTransparency = 0
closeBtn.Text = "X"
closeBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
closeBtn.Font = Enum.Font.SourceSansBold
closeBtn.TextSize = 15
closeBtn.BorderSizePixel = 0
closeBtn.Parent = titleBar
Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(0, 6)
addBtnSound(closeBtn)
-- Drag
local isResizing = false
local dragging, dragStart, startPos = false, nil, nil
titleBar.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = true
dragStart = input.Position
startPos = panel.Position
end
end)
titleBar.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end
end)
UserInputService.InputChanged:Connect(function(input)
if dragging and not isResizing and input.UserInputType == Enum.UserInputType.MouseMovement then
local delta = input.Position - dragStart
panel.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
end)
-- Fermer / Touche K
closeBtn.MouseButton1Click:Connect(function()
panel.Visible = false
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end)
UserInputService.InputBegan:Connect(function(input, gp)
if gp then return end
if input.KeyCode == Enum.KeyCode.K then
panel.Visible = not panel.Visible
if panel.Visible then
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end
end)
-- === GESTION CLIC DROIT POUR CAMÉRA (quand panel ouvert) ===
UserInputService.InputBegan:Connect(function(input, gp)
if gp then return end
if panel.Visible and input.UserInputType == Enum.UserInputType.MouseButton2 then
_S.rightMouseHeld = true
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton2 then
_S.rightMouseHeld = false
if panel.Visible then
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
UserInputService.MouseIconEnabled = true
end
end
end)
-- === POIGNÉES DE REDIMENSIONNEMENT ===
do
local minW, minH = 300, 290
local resizeHandle = nil
local resizeMouseStart = nil
local resizePanelStart = nil
local resizeSizeStart = nil
local function makeResizeHandle(name, pos, size)
local h = Instance.new("Frame")
h.Name = name
h.Size = size
h.Position = pos
h.BackgroundTransparency = 1
h.BorderSizePixel = 0
h.Active = true
h.ZIndex = 10
h.Parent = panel
h.MouseEnter:Connect(function()
h.BackgroundTransparency = 0.7
h.BackgroundColor3 = Color3.fromRGB(100, 150, 255)
end)
h.MouseLeave:Connect(function()
if not resizeHandle or resizeHandle ~= name then
h.BackgroundTransparency = 1
end
end)
h.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
resizeHandle = name
isResizing = true
resizeMouseStart = input.Position
resizePanelStart = panel.Position
resizeSizeStart = panel.Size
h.BackgroundTransparency = 0.4
end
end)
h.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
resizeHandle = nil
isResizing = false
h.BackgroundTransparency = 1
end
end)
return h
end
makeResizeHandle("hLeft", UDim2.new(0, -3, 0, 10), UDim2.new(0, 6, 1, -20))
makeResizeHandle("hRight", UDim2.new(1, -3, 0, 10), UDim2.new(0, 6, 1, -20))
makeResizeHandle("hTop", UDim2.new(0, 10, 0, -3), UDim2.new(1, -20, 0, 6))
makeResizeHandle("hBottom", UDim2.new(0, 10, 1, -3), UDim2.new(1, -20, 0, 6))
makeResizeHandle("hTL", UDim2.new(0, -4, 0, -4), UDim2.new(0, 10, 0, 10))
makeResizeHandle("hTR", UDim2.new(1, -6, 0, -4), UDim2.new(0, 10, 0, 10))
makeResizeHandle("hBL", UDim2.new(0, -4, 1, -6), UDim2.new(0, 10, 0, 10))
makeResizeHandle("hBR", UDim2.new(1, -6, 1, -6), UDim2.new(0, 10, 0, 10))
UserInputService.InputChanged:Connect(function(input)
if resizeHandle and input.UserInputType == Enum.UserInputType.MouseMovement then
local delta = input.Position - resizeMouseStart
local dX, dY = delta.X, delta.Y
local startW = resizeSizeStart.X.Offset
local startH = resizeSizeStart.Y.Offset
local startX = resizePanelStart.X.Offset
local startY = resizePanelStart.Y.Offset
local newW, newH, newX, newY = startW, startH, startX, startY
local isLeft = resizeHandle:find("Left") or resizeHandle:find("TL") or resizeHandle:find("BL")
local isRight = resizeHandle:find("Right") or resizeHandle:find("TR") or resizeHandle:find("BR")
local isTop = resizeHandle:find("Top") or resizeHandle:find("TL") or resizeHandle:find("TR")
local isBottom = resizeHandle:find("Bottom") or resizeHandle:find("BL") or resizeHandle:find("BR")
if isLeft then
newW = math.max(minW, startW - dX)
newX = startX + (startW - newW)
end
if isRight then
newW = math.max(minW, startW + dX)
end
if isTop then
newH = math.max(minH, startH - dY)
newY = startY + (startH - newH)
end
if isBottom then
newH = math.max(minH, startH + dY)
end
panel.Size = UDim2.new(0, newW, 0, newH)
panel.Position = UDim2.new(resizePanelStart.X.Scale, newX, resizePanelStart.Y.Scale, newY)
if updateScale then updateScale() end
end
end)
end
-- Conteneur principal (nav gauche + contenu droite)
local mainContainer = Instance.new("Frame")
mainContainer.Name = "MainContainer"
mainContainer.Size = UDim2.new(1, -6, 1, -29)
mainContainer.Position = UDim2.new(0, 3, 0, 26)
mainContainer.BackgroundTransparency = 1
mainContainer.BorderSizePixel = 0
mainContainer.Parent = panel
-- UIScale dynamique: adapte proportionnellement tout le contenu à la taille du panel
local mainScale = Instance.new("UIScale")
mainScale.Parent = mainContainer
-- Taille de design de reference (taille originale du panel)
local DESIGN_W = 340
local DESIGN_H = 350
updateScale = function()
local pw = panel.Size.X.Offset
local ph = panel.Size.Y.Offset
local s = math.min(pw / DESIGN_W, ph / DESIGN_H)
s = math.max(s, 0.1) -- empeche une echelle zero
mainScale.Scale = s
-- Compense la taille du mainContainer pour que le contenu mis a l'echelle remplisse le panel
mainContainer.Size = UDim2.new(1 / s, -6 / s, 1 / s, -29 / s)
end
updateScale()
-- Layout entièrement relatif: pas de UIScale, tout s'adapte à la taille du panel
-- Barre de navigation gauche (grille de catégories)
local navBar = Instance.new("ScrollingFrame")
navBar.Name = "NavBar"
navBar.Size = UDim2.new(0.245, 0, 1, -74)
navBar.Position = UDim2.new(0, 0, 0, 0)
navBar.BackgroundColor3 = Color3.fromRGB(14, 14, 22)
navBar.BackgroundTransparency = 0.1
navBar.BorderSizePixel = 0
navBar.ScrollBarThickness = 4
navBar.ScrollBarImageColor3 = Color3.fromRGB(100, 100, 120)
navBar.AutomaticCanvasSize = Enum.AutomaticSize.Y
navBar.CanvasSize = UDim2.new(0, 0, 0, 0)
navBar.ScrollingDirection = Enum.ScrollingDirection.Y
navBar.Parent = mainContainer
Instance.new("UICorner", navBar).CornerRadius = UDim.new(0, 6)
local navList = Instance.new("UIListLayout")
navList.Padding = UDim.new(0, 3)
navList.HorizontalAlignment = Enum.HorizontalAlignment.Center
navList.SortOrder = Enum.SortOrder.LayoutOrder
navList.Parent = navBar
-- Zone de contenu droite (scrolling frame pour les pages)
local contentScroll = Instance.new("ScrollingFrame")
contentScroll.Name = "ContentScroll"
contentScroll.Size = UDim2.new(0.755, -6, 1, 0)
contentScroll.Position = UDim2.new(0.245, 3, 0, 0)
contentScroll.BackgroundColor3 = Color3.fromRGB(8, 8, 12)
contentScroll.BackgroundTransparency = 1
contentScroll.BorderSizePixel = 0
contentScroll.ScrollBarThickness = 6
contentScroll.ScrollBarImageColor3 = Color3.fromRGB(100, 100, 120)
contentScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
contentScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
contentScroll.ScrollingDirection = Enum.ScrollingDirection.Y
contentScroll.Parent = mainContainer
-- Système de navigation par pages
local pages = {}
local navButtons = {}
local currentPage = nil
local function switchPage(pageName)
if currentPage and pages[currentPage] then
pages[currentPage].Visible = false
end
if currentPage and navButtons[currentPage] then
navButtons[currentPage].BackgroundColor3 = _S.customNavColor or Color3.fromRGB(60, 60, 65)
end
currentPage = pageName
if pages[pageName] then
pages[pageName].Visible = true
-- AutomaticCanvasSize gere automatiquement la taille du canvas
end
if navButtons[pageName] then
navButtons[pageName].BackgroundColor3 = _S.customNavActiveColor or Color3.fromRGB(100, 100, 110)
end
end
local function makeNavButton(name, label, order)
local b = Instance.new("TextButton")
b.Size = UDim2.new(1, -6, 0, 26)
b.BackgroundColor3 = _S.customNavColor or Color3.fromRGB(60, 60, 65)
b.BackgroundTransparency = 0
b.Text = label
b.TextColor3 = Color3.fromRGB(255, 255, 255)
b.Font = Enum.Font.SourceSansBold
b.TextSize = 13
b.TextTruncate = Enum.TextTruncate.AtEnd
b.BorderSizePixel = 0
b.LayoutOrder = order or 0
b.Parent = navBar
Instance.new("UICorner", b).CornerRadius = UDim.new(0, 4)
addBtnSound(b)
navButtons[name] = b
b.MouseButton1Click:Connect(function()
switchPage(name)
end)
return b
end
local function registerPage(name, frame)
pages[name] = frame
frame.Visible = false
end
-- Créer les boutons de navigation
makeNavButton("Joueurs", "Joueurs", 1)
makeNavButton("Deplacement", "Déplacement", 2)
makeNavButton("Actions", "Actions", 3)
makeNavButton("Position", "Position", 4)
makeNavButton("Voice", "Voice", 5)
makeNavButton("Auto", "Auto", 6)
makeNavButton("Lock", "Lock", 7)
makeNavButton("Infos", "Infos", 8)
makeNavButton("Omega", "Omega", 9)
makeNavButton("Parametres", "Paramètres", 10)
-- === Carte de profil en bas de la barre de navigation ===
local profileCard = Instance.new("Frame")
profileCard.Name = "ProfileCard"
profileCard.Size = UDim2.new(0.245, 0, 0, 70)
profileCard.Position = UDim2.new(0, 0, 1, -70)
profileCard.BackgroundColor3 = Color3.fromRGB(14, 14, 22)
profileCard.BackgroundTransparency = 0.1
profileCard.BorderSizePixel = 0
profileCard.Parent = mainContainer
-- Ligne de separation en haut de la carte profil
local profileSep = Instance.new("Frame")
profileSep.Size = UDim2.new(1, -10, 0, 1)
profileSep.Position = UDim2.new(0, 5, 0, 0)
profileSep.BackgroundColor3 = Color3.fromRGB(40, 40, 55)
profileSep.BorderSizePixel = 0
profileSep.Parent = profileCard
-- Avatar (image circulaire avec fond)
local avatarBg = Instance.new("Frame")
avatarBg.Size = UDim2.new(0, 44, 0, 44)
avatarBg.Position = UDim2.new(0, 8, 0.5, -22)
avatarBg.BackgroundColor3 = Color3.fromRGB(40, 40, 55)
avatarBg.BorderSizePixel = 0
avatarBg.Parent = profileCard
Instance.new("UICorner", avatarBg).CornerRadius = UDim.new(1, 0)
local avatar = Instance.new("ImageLabel")
avatar.Size = UDim2.new(1, -4, 1, -4)
avatar.Position = UDim2.new(0, 2, 0, 2)
avatar.BackgroundColor3 = Color3.fromRGB(30, 30, 40)
avatar.BorderSizePixel = 0
avatar.Image = ""
avatar.Parent = avatarBg
Instance.new("UICorner", avatar).CornerRadius = UDim.new(1, 0)
-- Nom du joueur (pseudo Roblox)
local profileName = Instance.new("TextLabel")
profileName.Size = UDim2.new(1, -62, 0, 22)
profileName.Position = UDim2.new(0, 58, 0, 12)
profileName.BackgroundTransparency = 1
profileName.Text = player.Name
profileName.TextColor3 = Color3.fromRGB(255, 255, 255)
profileName.Font = Enum.Font.SourceSansBold
profileName.TextSize = 13
profileName.TextXAlignment = Enum.TextXAlignment.Left
profileName.TextTruncate = Enum.TextTruncate.AtEnd
profileName.Parent = profileCard
-- Role du joueur
local profileRole = Instance.new("TextLabel")
profileRole.Size = UDim2.new(1, -62, 0, 16)
profileRole.Position = UDim2.new(0, 58, 0, 36)
profileRole.BackgroundTransparency = 1
local function updateProfileRole()
local team = player.Team
if team then
profileRole.Text = team.Name
local teamColor = team.TeamColor
if teamColor then
profileRole.TextColor3 = teamColor.Color
end
else
profileRole.Text = "Aucune équipe"
profileRole.TextColor3 = Color3.fromRGB(180, 180, 180)
end
end
updateProfileRole()
player:GetPropertyChangedSignal("Team"):Connect(updateProfileRole)
profileRole.Font = Enum.Font.SourceSans
profileRole.TextSize = 12
profileRole.TextXAlignment = Enum.TextXAlignment.Left
profileRole.TextTruncate = Enum.TextTruncate.AtEnd
profileRole.Parent = profileCard
-- Charger l'avatar Roblox du joueur en arriere-plan
task.spawn(function()
local userId = player.UserId
local success, result = pcall(function()
return Players:GetUserThumbnailAsync(userId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420)
end)
if success and result and avatar and avatar.Parent then
avatar.Image = result
end
end)
-- === Section Joueurs ===
local pSection = Instance.new("Frame")
pSection.Size = UDim2.new(1, -10, 0, 368)
pSection.Position = UDim2.new(0, 5, 0, 5)
pSection.BackgroundTransparency = 1
pSection.Parent = contentScroll
do
local pHeader = Instance.new("TextLabel")
pHeader.Size = UDim2.new(1, 0, 0, 18)
pHeader.BackgroundTransparency = 1
pHeader.Text = "Joueurs"
pHeader.TextColor3 = Color3.fromRGB(255, 255, 255)
pHeader.Font = Enum.Font.SourceSansBold
pHeader.TextSize = 14
pHeader.TextXAlignment = Enum.TextXAlignment.Left
pHeader.Parent = pSection
end
do
local pDesc = Instance.new("TextLabel")
pDesc.Size = UDim2.new(1, 0, 0, 28)
pDesc.Position = UDim2.new(0, 0, 0, 18)
pDesc.BackgroundTransparency = 1
pDesc.Text = "Cliquez sur un joueur dans la liste pour le sélectionner. Utilisez la barre de recherche pour filtrer les joueurs par nom. Le joueur sélectionné sera utilisé par les autres catégories (TP Joueur, Lock Select, Voice, etc.)."
pDesc.TextColor3 = Color3.fromRGB(255, 255, 255)
pDesc.Font = Enum.Font.SourceSans
pDesc.TextSize = 12
pDesc.TextWrapped = true
pDesc.TextTruncate = Enum.TextTruncate.AtEnd
pDesc.TextXAlignment = Enum.TextXAlignment.Left
pDesc.TextYAlignment = Enum.TextYAlignment.Top
pDesc.Parent = pSection
end
-- Barre de recherche
local searchBox = Instance.new("TextBox")
searchBox.Size = UDim2.new(1, 0, 0, 22)
searchBox.Position = UDim2.new(0, 0, 0, 48)
searchBox.BackgroundColor3 = Color3.fromRGB(30, 30, 45)
searchBox.BackgroundTransparency = 0
searchBox.Text = ""
searchBox.PlaceholderText = "Rechercher un joueur..."
searchBox.TextColor3 = Color3.fromRGB(255, 255, 255)
searchBox.Font = Enum.Font.SourceSans
searchBox.TextSize = 14
searchBox.BorderSizePixel = 0
searchBox.Parent = pSection
Instance.new("UICorner", searchBox).CornerRadius = UDim.new(0, 4)Instance.new("UICorner", searchBox).CornerRadius = UDim.new(0, 4)
-- === Boutons Spectate ===
local spectateBtnRow = Instance.new("Frame")
spectateBtnRow.Size = UDim2.new(1, 0, 0, 26)
spectateBtnRow.Position = UDim2.new(0, 0, 0, 74)
spectateBtnRow.BackgroundTransparency = 1
spectateBtnRow.Parent = pSection
local spectateBtn = btn(spectateBtnRow, "Spectate", UDim2.new(0, 0, 0, 0), UDim2.new(0.5, -3, 0, 24), Color3.fromRGB(40, 60, 100))
spectateBtn.Parent = spectateBtnRow
local stopSpectateBtn = btn(spectateBtnRow, "Stop Spectate", UDim2.new(0.5, 3, 0, 0), UDim2.new(0.5, -3, 0, 24), Color3.fromRGB(100, 40, 40))
stopSpectateBtn.Parent = spectateBtnRow
local spectateNavRow = Instance.new("Frame")
spectateNavRow.Size = UDim2.new(1, 0, 0, 24)
spectateNavRow.Position = UDim2.new(0, 0, 0, 100)
spectateNavRow.BackgroundTransparency = 1
spectateNavRow.Parent = pSection
local prevSpectateBtn = btn(spectateNavRow, "Joueur Precedent", UDim2.new(0, 0, 0, 0), UDim2.new(0.5, -3, 0, 22), Color3.fromRGB(50, 45, 60))
prevSpectateBtn.Parent = spectateNavRow
local nextSpectateBtn = btn(spectateNavRow, "Joueur Suivant", UDim2.new(0.5, 3, 0, 0), UDim2.new(0.5, -3, 0, 22), Color3.fromRGB(50, 45, 60))
nextSpectateBtn.Parent = spectateNavRow
-- Scroll liste joueurs
local pScroll = Instance.new("ScrollingFrame")
pScroll.Size = UDim2.new(1, 0, 1, -128)
pScroll.Position = UDim2.new(0, 0, 0, 128)
pScroll.BackgroundColor3 = Color3.fromRGB(12, 12, 18)
pScroll.BackgroundTransparency = 0
pScroll.BorderSizePixel = 0
pScroll.ScrollBarThickness = 4
pScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
pScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
pScroll.Parent = pSection
Instance.new("UICorner", pScroll).CornerRadius = UDim.new(0, 4)
Instance.new("UIListLayout", pScroll).Padding = UDim.new(0, 2)
-- === Section Déplacement ===
local mSection = Instance.new("Frame")
mSection.Size = UDim2.new(1, -10, 0, 322)
mSection.Position = UDim2.new(0, 5, 0, 5)
mSection.BackgroundTransparency = 1
mSection.Parent = contentScroll
do
local mHeader = Instance.new("TextLabel")
mHeader.Size = UDim2.new(1, 0, 0, 18)
mHeader.BackgroundTransparency = 1
mHeader.Text = "Déplacement"
mHeader.TextColor3 = Color3.fromRGB(255, 255, 255)
mHeader.Font = Enum.Font.SourceSansBold
mHeader.TextSize = 14
mHeader.TextXAlignment = Enum.TextXAlignment.Left
mHeader.Parent = mSection
end
do
local mDesc = Instance.new("TextLabel")
mDesc.Size = UDim2.new(1, 0, 0, 28)
mDesc.Position = UDim2.new(0, 0, 0, 18)
mDesc.BackgroundTransparency = 1
mDesc.Text = "Vitesse: modifie votre vitesse de marche (WalkSpeed). Fly: active/désactive le vol. Nager: nage dans l'air. Utilisez les sliders pour ajuster WalkSpeed, FlySpeed et SwimSpeed. Cliquez sur les boutons pour les activer ou les désactiver."
mDesc.TextColor3 = Color3.fromRGB(255, 255, 255)
mDesc.Font = Enum.Font.SourceSans
mDesc.TextSize = 12
mDesc.TextWrapped = true
mDesc.TextTruncate = Enum.TextTruncate.AtEnd
mDesc.TextXAlignment = Enum.TextXAlignment.Left
mDesc.TextYAlignment = Enum.TextYAlignment.Top
mDesc.Parent = mSection
end
local speedBtn = btn(mSection, "Vitesse", UDim2.new(0, 0, 0, 48), UDim2.new(1, -2, 0, 24), Color3.fromRGB(50, 40, 30))
speedBtn.Font = Enum.Font.SourceSansBold
speedBtn.TextSize = 15
local setSpeedToggle = makeToggle(speedBtn, "Vitesse")
local flyBtn = btn(mSection, "Fly", UDim2.new(0, 0, 0, 140), UDim2.new(1, -2, 0, 24), Color3.fromRGB(30, 40, 50))
flyBtn.Font = Enum.Font.SourceSansBold
flyBtn.TextSize = 15
local setFlyToggle = makeToggle(flyBtn, "Fly")
-- Walk speed: modern slider card
local walkCard = Instance.new("Frame")
walkCard.Size = UDim2.new(1, -2, 0, 44)
walkCard.Position = UDim2.new(0, 0, 0, 84)
walkCard.BackgroundColor3 = Color3.fromRGB(22, 22, 28)
walkCard.BackgroundTransparency = 0
walkCard.BorderSizePixel = 0
walkCard.Parent = mSection
Instance.new("UICorner", walkCard).CornerRadius = UDim.new(0, 8)
do
local walkStroke = Instance.new("UIStroke")
walkStroke.Color = Color3.fromRGB(50, 50, 55)
walkStroke.Thickness = 1
walkStroke.Transparency = 0.3
walkStroke.Parent = walkCard
end
do
local walkLabel = Instance.new("TextLabel")
walkLabel.Size = UDim2.new(0, 80, 0, 16)
walkLabel.Position = UDim2.new(0, 8, 0, 5)
walkLabel.BackgroundTransparency = 1
walkLabel.Text = "Walk Speed"
walkLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
walkLabel.Font = Enum.Font.SourceSansBold
walkLabel.TextSize = 13
walkLabel.TextXAlignment = Enum.TextXAlignment.Left
walkLabel.Parent = walkCard
end
local speedValueLabel = Instance.new("TextBox")
speedValueLabel.Size = UDim2.new(0, 50, 0, 16)
speedValueLabel.Position = UDim2.new(1, -58, 0, 5)
speedValueLabel.BackgroundColor3 = Color3.fromRGB(22, 22, 28)
speedValueLabel.BackgroundTransparency = 1
speedValueLabel.Text = tostring(_S.speedValue)
speedValueLabel.TextColor3 = Color3.fromRGB(255, 60, 60)
speedValueLabel.Font = Enum.Font.SourceSansBold
speedValueLabel.TextSize = 13
speedValueLabel.BorderSizePixel = 0
speedValueLabel.ClearTextOnFocus = false
speedValueLabel.TextXAlignment = Enum.TextXAlignment.Right
speedValueLabel.Parent = walkCard
local walkTrack = Instance.new("Frame")
walkTrack.Size = UDim2.new(1, -16, 0, 4)
walkTrack.Position = UDim2.new(0, 8, 0, 30)
walkTrack.BackgroundColor3 = Color3.fromRGB(12, 12, 16)
walkTrack.BorderSizePixel = 0
walkTrack.Parent = walkCard
Instance.new("UICorner", walkTrack).CornerRadius = UDim.new(1, 0)
local walkFill = Instance.new("Frame")
walkFill.Size = UDim2.new(0, 0, 1, 0)
walkFill.BackgroundColor3 = Color3.fromRGB(220, 50, 50)
walkFill.BorderSizePixel = 0
walkFill.Parent = walkTrack
Instance.new("UICorner", walkFill).CornerRadius = UDim.new(1, 0)
local walkThumb = Instance.new("Frame")
walkThumb.Size = UDim2.new(0, 14, 0, 14)
walkThumb.AnchorPoint = Vector2.new(0.5, 0.5)
walkThumb.Position = UDim2.new(0, 0, 0.5, 0)
walkThumb.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
walkThumb.BorderSizePixel = 0
walkThumb.Parent = walkTrack
Instance.new("UICorner", walkThumb).CornerRadius = UDim.new(1, 0)
do
local walkThumbShadow = Instance.new("UIStroke")
walkThumbShadow.Color = Color3.fromRGB(0, 0, 0)
walkThumbShadow.Thickness = 1
walkThumbShadow.Transparency = 0.5
walkThumbShadow.Parent = walkThumb
end
local speedDownBtn = Instance.new("TextButton")
speedDownBtn.Visible = false
speedDownBtn.Parent = walkCard
addBtnSound(speedDownBtn)
local speedUpBtn = Instance.new("TextButton")
speedUpBtn.Visible = false
speedUpBtn.Parent = walkCard
addBtnSound(speedUpBtn)
local WALK_MIN = 1
local WALK_MAX = 500
local function walkUpdateSlider(animate)
local pct = math.clamp((_S.speedValue - WALK_MIN) / (WALK_MAX - WALK_MIN), 0, 1)
if animate then
TweenService:Create(walkFill, TweenInfo.new(0.15), {Size = UDim2.new(pct, 0, 1, 0)}):Play()
TweenService:Create(walkThumb, TweenInfo.new(0.15), {Position = UDim2.new(pct, 0, 0.5, 0)}):Play()
else
walkFill.Size = UDim2.new(pct, 0, 1, 0)
walkThumb.Position = UDim2.new(pct, 0, 0.5, 0)
end
end
local walkDragging = false
walkTrack.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
walkDragging = true
local tp = walkTrack.AbsolutePosition.X
local ts = walkTrack.AbsoluteSize.X
local pct = math.clamp((input.Position.X - tp) / ts, 0, 1)
_S.speedValue = math.max(1, math.floor(WALK_MIN + pct * (WALK_MAX - WALK_MIN)))
speedValueLabel.Text = tostring(_S.speedValue)
walkUpdateSlider(true)
if _S.speedEnabled then applySpeed() end
end
end)
walkThumb.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
walkDragging = true
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
walkDragging = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if walkDragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local tp = walkTrack.AbsolutePosition.X
local ts = walkTrack.AbsoluteSize.X
local pct = math.clamp((input.Position.X - tp) / ts, 0, 1)
_S.speedValue = math.max(1, math.floor(WALK_MIN + pct * (WALK_MAX - WALK_MIN)))
speedValueLabel.Text = tostring(_S.speedValue)
walkUpdateSlider(true)
if _S.speedEnabled then applySpeed() end
end
end)
speedValueLabel:GetPropertyChangedSignal("Text"):Connect(function()
if not walkDragging then
local num = tonumber(speedValueLabel.Text)
if num then
local pct = math.clamp((num - WALK_MIN) / (WALK_MAX - WALK_MIN), 0, 1)
TweenService:Create(walkFill, TweenInfo.new(0.15), {Size = UDim2.new(pct, 0, 1, 0)}):Play()
TweenService:Create(walkThumb, TweenInfo.new(0.15), {Position = UDim2.new(pct, 0, 0.5, 0)}):Play()
end
end
end)
walkUpdateSlider(false)
speedValueLabel.FocusLost:Connect(function()
local num = tonumber(speedValueLabel.Text)
if num then
_S.speedValue = math.max(1, math.floor(num))
speedValueLabel.Text = tostring(_S.speedValue)
walkUpdateSlider(true)
if _S.speedEnabled then applySpeed() end
else
speedValueLabel.Text = tostring(_S.speedValue)
walkUpdateSlider(true)
end
end)
-- Fly speed: modern slider card
local flySpeedCard = Instance.new("Frame")
flySpeedCard.Size = UDim2.new(1, -2, 0, 44)
flySpeedCard.Position = UDim2.new(0, 0, 0, 176)
flySpeedCard.BackgroundColor3 = Color3.fromRGB(22, 22, 28)
flySpeedCard.BackgroundTransparency = 0
flySpeedCard.BorderSizePixel = 0
flySpeedCard.Parent = mSection
Instance.new("UICorner", flySpeedCard).CornerRadius = UDim.new(0, 8)
do
local flySpeedStroke = Instance.new("UIStroke")
flySpeedStroke.Color = Color3.fromRGB(50, 50, 55)
flySpeedStroke.Thickness = 1
flySpeedStroke.Transparency = 0.3
flySpeedStroke.Parent = flySpeedCard
end
do
local flyLabel = Instance.new("TextLabel")
flyLabel.Size = UDim2.new(0, 80, 0, 16)
flyLabel.Position = UDim2.new(0, 8, 0, 5)
flyLabel.BackgroundTransparency = 1
flyLabel.Text = "Fly Speed"
flyLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
flyLabel.Font = Enum.Font.SourceSansBold
flyLabel.TextSize = 13
flyLabel.TextXAlignment = Enum.TextXAlignment.Left
flyLabel.Parent = flySpeedCard
end
local flySpeedValueLabel = Instance.new("TextBox")
flySpeedValueLabel.Size = UDim2.new(0, 50, 0, 16)
flySpeedValueLabel.Position = UDim2.new(1, -58, 0, 5)
flySpeedValueLabel.BackgroundColor3 = Color3.fromRGB(22, 22, 28)
flySpeedValueLabel.BackgroundTransparency = 1
flySpeedValueLabel.Text = tostring(_S.flySpeed)
flySpeedValueLabel.TextColor3 = Color3.fromRGB(255, 60, 60)
flySpeedValueLabel.Font = Enum.Font.SourceSansBold
flySpeedValueLabel.TextSize = 13
flySpeedValueLabel.BorderSizePixel = 0
flySpeedValueLabel.ClearTextOnFocus = false
flySpeedValueLabel.TextXAlignment = Enum.TextXAlignment.Right
flySpeedValueLabel.Parent = flySpeedCard
local flyTrack = Instance.new("Frame")
flyTrack.Size = UDim2.new(1, -16, 0, 4)
flyTrack.Position = UDim2.new(0, 8, 0, 30)
flyTrack.BackgroundColor3 = Color3.fromRGB(12, 12, 16)
flyTrack.BorderSizePixel = 0
flyTrack.Parent = flySpeedCard
Instance.new("UICorner", flyTrack).CornerRadius = UDim.new(1, 0)
local flyFill = Instance.new("Frame")
flyFill.Size = UDim2.new(0, 0, 1, 0)
flyFill.BackgroundColor3 = Color3.fromRGB(220, 50, 50)
flyFill.BorderSizePixel = 0
flyFill.Parent = flyTrack
Instance.new("UICorner", flyFill).CornerRadius = UDim.new(1, 0)
local flyThumb = Instance.new("Frame")
flyThumb.Size = UDim2.new(0, 14, 0, 14)
flyThumb.AnchorPoint = Vector2.new(0.5, 0.5)
flyThumb.Position = UDim2.new(0, 0, 0.5, 0)
flyThumb.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
flyThumb.BorderSizePixel = 0
flyThumb.Parent = flyTrack
Instance.new("UICorner", flyThumb).CornerRadius = UDim.new(1, 0)
do
local flyThumbShadow = Instance.new("UIStroke")
flyThumbShadow.Color = Color3.fromRGB(0, 0, 0)
flyThumbShadow.Thickness = 1
flyThumbShadow.Transparency = 0.5
flyThumbShadow.Parent = flyThumb
end
local flySpeedDownBtn = Instance.new("TextButton")
flySpeedDownBtn.Visible = false
flySpeedDownBtn.Parent = flySpeedCard
addBtnSound(flySpeedDownBtn)
local flySpeedUpBtn = Instance.new("TextButton")
flySpeedUpBtn.Visible = false
flySpeedUpBtn.Parent = flySpeedCard
addBtnSound(flySpeedUpBtn)
local FLY_MIN = 1
local FLY_MAX = 500
local function flyUpdateSlider(animate)
local pct = math.clamp((_S.flySpeed - FLY_MIN) / (FLY_MAX - FLY_MIN), 0, 1)
if animate then
TweenService:Create(flyFill, TweenInfo.new(0.15), {Size = UDim2.new(pct, 0, 1, 0)}):Play()
TweenService:Create(flyThumb, TweenInfo.new(0.15), {Position = UDim2.new(pct, 0, 0.5, 0)}):Play()
else
flyFill.Size = UDim2.new(pct, 0, 1, 0)
flyThumb.Position = UDim2.new(pct, 0, 0.5, 0)
end
end
local flyDragging = false
flyTrack.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
flyDragging = true
local tp = flyTrack.AbsolutePosition.X
local ts = flyTrack.AbsoluteSize.X
local pct = math.clamp((input.Position.X - tp) / ts, 0, 1)
_S.flySpeed = math.max(1, math.floor(FLY_MIN + pct * (FLY_MAX - FLY_MIN)))
flySpeedValueLabel.Text = tostring(_S.flySpeed)
flyUpdateSlider(true)
end
end)
flyThumb.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
flyDragging = true
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
flyDragging = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if flyDragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local tp = flyTrack.AbsolutePosition.X
local ts = flyTrack.AbsoluteSize.X
local pct = math.clamp((input.Position.X - tp) / ts, 0, 1)
_S.flySpeed = math.max(1, math.floor(FLY_MIN + pct * (FLY_MAX - FLY_MIN)))
flySpeedValueLabel.Text = tostring(_S.flySpeed)
flyUpdateSlider(true)
end
end)
flySpeedValueLabel:GetPropertyChangedSignal("Text"):Connect(function()
if not flyDragging then
local num = tonumber(flySpeedValueLabel.Text)
if num then
local pct = math.clamp((num - FLY_MIN) / (FLY_MAX - FLY_MIN), 0, 1)
TweenService:Create(flyFill, TweenInfo.new(0.15), {Size = UDim2.new(pct, 0, 1, 0)}):Play()
TweenService:Create(flyThumb, TweenInfo.new(0.15), {Position = UDim2.new(pct, 0, 0.5, 0)}):Play()
end
end
end)
flyUpdateSlider(false)
flySpeedValueLabel.FocusLost:Connect(function()
local num = tonumber(flySpeedValueLabel.Text)
if num then
_S.flySpeed = math.max(1, math.floor(num))
flySpeedValueLabel.Text = tostring(_S.flySpeed)
else
flySpeedValueLabel.Text = tostring(_S.flySpeed)
end
end)
-- Swim button (Nager dans l'air)
do
local swimBtn = btn(mSection, "Nager", UDim2.new(0, 0, 0, 232), UDim2.new(1, -2, 0, 24), Color3.fromRGB(30, 50, 40))
swimBtn.Font = Enum.Font.SourceSansBold
swimBtn.TextSize = 15
_S.setSwimToggle = makeToggle(swimBtn, "Nager")
_S.swimBtn = swimBtn
-- Swim speed: modern slider card
local swimCard = Instance.new("Frame")
swimCard.Size = UDim2.new(1, -2, 0, 44)
swimCard.Position = UDim2.new(0, 0, 0, 268)
swimCard.BackgroundColor3 = Color3.fromRGB(22, 22, 28)
swimCard.BackgroundTransparency = 0
swimCard.BorderSizePixel = 0
swimCard.Parent = mSection
Instance.new("UICorner", swimCard).CornerRadius = UDim.new(0, 8)
do
local swimStroke = Instance.new("UIStroke")
swimStroke.Color = Color3.fromRGB(50, 50, 55)
swimStroke.Thickness = 1
swimStroke.Transparency = 0.3
swimStroke.Parent = swimCard
end
do
local swimLabel = Instance.new("TextLabel")
swimLabel.Size = UDim2.new(0, 80, 0, 16)
swimLabel.Position = UDim2.new(0, 8, 0, 5)
swimLabel.BackgroundTransparency = 1
swimLabel.Text = "Swim Speed"
swimLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
swimLabel.Font = Enum.Font.SourceSansBold
swimLabel.TextSize = 13
swimLabel.TextXAlignment = Enum.TextXAlignment.Left
swimLabel.Parent = swimCard
end
local swimSpeedValueLabel = Instance.new("TextBox")
swimSpeedValueLabel.Size = UDim2.new(0, 50, 0, 16)
swimSpeedValueLabel.Position = UDim2.new(1, -58, 0, 5)
swimSpeedValueLabel.BackgroundColor3 = Color3.fromRGB(22, 22, 28)
swimSpeedValueLabel.BackgroundTransparency = 1
swimSpeedValueLabel.Text = tostring(_S.swimSpeed)
swimSpeedValueLabel.TextColor3 = Color3.fromRGB(255, 60, 60)
swimSpeedValueLabel.Font = Enum.Font.SourceSansBold
swimSpeedValueLabel.TextSize = 13
swimSpeedValueLabel.BorderSizePixel = 0
swimSpeedValueLabel.ClearTextOnFocus = false
swimSpeedValueLabel.TextXAlignment = Enum.TextXAlignment.Right
swimSpeedValueLabel.Parent = swimCard
_S.swimSpeedValueLabel = swimSpeedValueLabel
local swimTrack = Instance.new("Frame")
swimTrack.Size = UDim2.new(1, -16, 0, 4)
swimTrack.Position = UDim2.new(0, 8, 0, 30)
swimTrack.BackgroundColor3 = Color3.fromRGB(12, 12, 16)
swimTrack.BorderSizePixel = 0
swimTrack.Parent = swimCard
Instance.new("UICorner", swimTrack).CornerRadius = UDim.new(1, 0)
local swimFill = Instance.new("Frame")
swimFill.Size = UDim2.new(0, 0, 1, 0)
swimFill.BackgroundColor3 = Color3.fromRGB(220, 50, 50)
swimFill.BorderSizePixel = 0
swimFill.Parent = swimTrack
Instance.new("UICorner", swimFill).CornerRadius = UDim.new(1, 0)
local swimThumb = Instance.new("Frame")
swimThumb.Size = UDim2.new(0, 14, 0, 14)
swimThumb.AnchorPoint = Vector2.new(0.5, 0.5)
swimThumb.Position = UDim2.new(0, 0, 0.5, 0)
swimThumb.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
swimThumb.BorderSizePixel = 0
swimThumb.Parent = swimTrack
Instance.new("UICorner", swimThumb).CornerRadius = UDim.new(1, 0)
do
local swimThumbShadow = Instance.new("UIStroke")
swimThumbShadow.Color = Color3.fromRGB(0, 0, 0)
swimThumbShadow.Thickness = 1
swimThumbShadow.Transparency = 0.5
swimThumbShadow.Parent = swimThumb
end
local swimSpeedDownBtn = Instance.new("TextButton")
swimSpeedDownBtn.Visible = false
swimSpeedDownBtn.Parent = swimCard
addBtnSound(swimSpeedDownBtn)
_S.swimSpeedDownBtn = swimSpeedDownBtn
local swimSpeedUpBtn = Instance.new("TextButton")
swimSpeedUpBtn.Visible = false
swimSpeedUpBtn.Parent = swimCard
addBtnSound(swimSpeedUpBtn)
_S.swimSpeedUpBtn = swimSpeedUpBtn
local SWIM_MIN = 1
local SWIM_MAX = 500
local function swimUpdateSlider(animate)
local pct = math.clamp((_S.swimSpeed - SWIM_MIN) / (SWIM_MAX - SWIM_MIN), 0, 1)
if animate then
TweenService:Create(swimFill, TweenInfo.new(0.15), {Size = UDim2.new(pct, 0, 1, 0)}):Play()
TweenService:Create(swimThumb, TweenInfo.new(0.15), {Position = UDim2.new(pct, 0, 0.5, 0)}):Play()
else
swimFill.Size = UDim2.new(pct, 0, 1, 0)
swimThumb.Position = UDim2.new(pct, 0, 0.5, 0)
end
end
_S.swimUpdateSlider = swimUpdateSlider
local swimDragging = false
swimTrack.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
swimDragging = true
local tp = swimTrack.AbsolutePosition.X
local ts = swimTrack.AbsoluteSize.X
local pct = math.clamp((input.Position.X - tp) / ts, 0, 1)
_S.swimSpeed = math.max(1, math.floor(SWIM_MIN + pct * (SWIM_MAX - SWIM_MIN)))
swimSpeedValueLabel.Text = tostring(_S.swimSpeed)
swimUpdateSlider(true)
end
end)
swimThumb.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
swimDragging = true
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
swimDragging = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if swimDragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local tp = swimTrack.AbsolutePosition.X
local ts = swimTrack.AbsoluteSize.X
local pct = math.clamp((input.Position.X - tp) / ts, 0, 1)
_S.swimSpeed = math.max(1, math.floor(SWIM_MIN + pct * (SWIM_MAX - SWIM_MIN)))
swimSpeedValueLabel.Text = tostring(_S.swimSpeed)
swimUpdateSlider(true)
end
end)
swimSpeedValueLabel:GetPropertyChangedSignal("Text"):Connect(function()
if not swimDragging then
local num = tonumber(swimSpeedValueLabel.Text)
if num then
local pct = math.clamp((num - SWIM_MIN) / (SWIM_MAX - SWIM_MIN), 0, 1)
TweenService:Create(swimFill, TweenInfo.new(0.15), {Size = UDim2.new(pct, 0, 1, 0)}):Play()
TweenService:Create(swimThumb, TweenInfo.new(0.15), {Position = UDim2.new(pct, 0, 0.5, 0)}):Play()
end
end
end)
swimUpdateSlider(false)
swimSpeedValueLabel.FocusLost:Connect(function()
local num = tonumber(swimSpeedValueLabel.Text)
if num then
_S.swimSpeed = math.max(1, math.floor(num))
swimSpeedValueLabel.Text = tostring(_S.swimSpeed)
else
swimSpeedValueLabel.Text = tostring(_S.swimSpeed)
end
end)
end
-- === Section Actions ===
local aSection = Instance.new("Frame")
aSection.Size = UDim2.new(1, -10, 0, 478)
aSection.Position = UDim2.new(0, 5, 0, 5)
aSection.BackgroundTransparency = 1
aSection.Parent = contentScroll
do
local aHeader = Instance.new("TextLabel")
aHeader.Size = UDim2.new(1, 0, 0, 18)
aHeader.BackgroundTransparency = 1
aHeader.Text = "Actions"
aHeader.TextColor3 = Color3.fromRGB(255, 255, 255)
aHeader.Font = Enum.Font.SourceSansBold
aHeader.TextSize = 14
aHeader.TextXAlignment = Enum.TextXAlignment.Left
aHeader.Parent = aSection
end
do
local aDesc = Instance.new("TextLabel")
aDesc.Size = UDim2.new(1, 0, 0, 28)
aDesc.Position = UDim2.new(0, 0, 0, 18)
aDesc.BackgroundTransparency = 1
aDesc.Text = "ESP: affiche les joueurs à travers les murs. Noclip: traverse les murs. Xray: voir à travers les blocs. Voir dans le noir: éclaire l'écran. TP Joueur: téléporte un joueur (sélectionnez-le d'abord dans Joueurs). Tool Téléport.: téléporte avec un outil. Give All Tools: donne tous les outils. Réapparaitre: recommence. TP All: téléporte tous les joueurs vers vous. Spin: fait tourner votre personnage sur lui-même. Spin Speed: ajuste la vitesse de rotation."
aDesc.TextColor3 = Color3.fromRGB(255, 255, 255)
aDesc.Font = Enum.Font.SourceSans
aDesc.TextSize = 12
aDesc.TextWrapped = true
aDesc.TextTruncate = Enum.TextTruncate.AtEnd
aDesc.TextXAlignment = Enum.TextXAlignment.Left
aDesc.TextYAlignment = Enum.TextYAlignment.Top
aDesc.Parent = aSection
end
local espBtn = btn(aSection, "ESP", UDim2.new(0, 0, 0, 48), UDim2.new(1, -2, 0, 24), Color3.fromRGB(50, 30, 50))
local setESPToggle = makeToggle(espBtn, "ESP")
local noclipBtn = btn(aSection, "Noclip", UDim2.new(0, 0, 0, 84), UDim2.new(1, -2, 0, 24), Color3.fromRGB(40, 30, 30))
local setNoclipToggle = makeToggle(noclipBtn, "Noclip")
local tpPlayerBtn = btn(aSection, "TP Joueur", UDim2.new(0, 0, 0, 120), UDim2.new(1, -2, 0, 24), Color3.fromRGB(30, 40, 50))
local tpToolBtn = btn(aSection, "Tool Téléport.", UDim2.new(0, 0, 0, 156), UDim2.new(1, -2, 0, 24), Color3.fromRGB(40, 30, 60))
local giveToolsBtn = btn(aSection, "Give All Tools", UDim2.new(0, 0, 0, 192), UDim2.new(1, -2, 0, 24), Color3.fromRGB(30, 60, 40))
local respawnBtn = btn(aSection, "Réapparaitre", UDim2.new(0, 0, 0, 228), UDim2.new(1, -2, 0, 24), Color3.fromRGB(60, 40, 30))
local tpAllBtn = btn(aSection, "TP All", UDim2.new(0, 0, 0, 264), UDim2.new(1, -2, 0, 24), Color3.fromRGB(30, 100, 40))
local setTpAllToggle = makeToggle(tpAllBtn, "TP All")
local xrayBtn = btn(aSection, "Xray", UDim2.new(0, 0, 0, 300), UDim2.new(1, -2, 0, 24), Color3.fromRGB(30, 30, 50))
local setXrayToggle = makeToggle(xrayBtn, "Xray")
local nightVisionBtn = btn(aSection, "Voir dans le noir", UDim2.new(0, 0, 0, 336), UDim2.new(1, -2, 0, 24), Color3.fromRGB(20, 35, 25))
local setNightVisionToggle = makeToggle(nightVisionBtn, "Voir dans le noir")
-- Spin toggle button
local spinBtn = btn(aSection, "Spin", UDim2.new(0, 0, 0, 372), UDim2.new(1, -2, 0, 24), Color3.fromRGB(30, 50, 60))
local setSpinToggle = makeToggle(spinBtn, "Spin")
-- Spin Speed slider (same style as Fly Speed)
local spinSpeedCard = Instance.new("Frame")
spinSpeedCard.Size = UDim2.new(1, -2, 0, 44)
spinSpeedCard.Position = UDim2.new(0, 0, 0, 398)
spinSpeedCard.BackgroundColor3 = Color3.fromRGB(22, 22, 28)
spinSpeedCard.BackgroundTransparency = 0
spinSpeedCard.BorderSizePixel = 0
spinSpeedCard.Parent = aSection
Instance.new("UICorner", spinSpeedCard).CornerRadius = UDim.new(0, 8)
do
local spinStroke = Instance.new("UIStroke")
spinStroke.Color = Color3.fromRGB(50, 50, 55)
spinStroke.Thickness = 1
spinStroke.Transparency = 0.3
spinStroke.Parent = spinSpeedCard
end
do
local spinLabel = Instance.new("TextLabel")
spinLabel.Size = UDim2.new(0, 80, 0, 16)
spinLabel.Position = UDim2.new(0, 8, 0, 5)
spinLabel.BackgroundTransparency = 1
spinLabel.Text = "Spin Speed"
spinLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
spinLabel.Font = Enum.Font.SourceSansBold
spinLabel.TextSize = 13
spinLabel.TextXAlignment = Enum.TextXAlignment.Left
spinLabel.Parent = spinSpeedCard
end
local spinSpeedValueLabel = Instance.new("TextBox")
spinSpeedValueLabel.Size = UDim2.new(0, 50, 0, 16)
spinSpeedValueLabel.Position = UDim2.new(1, -58, 0, 5)
spinSpeedValueLabel.BackgroundColor3 = Color3.fromRGB(22, 22, 28)
spinSpeedValueLabel.BackgroundTransparency = 1
spinSpeedValueLabel.Text = tostring(_S.spinSpeed)
spinSpeedValueLabel.TextColor3 = Color3.fromRGB(100, 200, 255)
spinSpeedValueLabel.Font = Enum.Font.SourceSansBold
spinSpeedValueLabel.TextSize = 13
spinSpeedValueLabel.BorderSizePixel = 0
spinSpeedValueLabel.ClearTextOnFocus = false
spinSpeedValueLabel.TextXAlignment = Enum.TextXAlignment.Right
spinSpeedValueLabel.Parent = spinSpeedCard
local spinTrack = Instance.new("Frame")
spinTrack.Size = UDim2.new(1, -16, 0, 4)
spinTrack.Position = UDim2.new(0, 8, 0, 30)
spinTrack.BackgroundColor3 = Color3.fromRGB(12, 12, 16)
spinTrack.BorderSizePixel = 0
spinTrack.Parent = spinSpeedCard
Instance.new("UICorner", spinTrack).CornerRadius = UDim.new(1, 0)
local spinFill = Instance.new("Frame")
spinFill.Size = UDim2.new(0, 0, 1, 0)
spinFill.BackgroundColor3 = Color3.fromRGB(50, 150, 200)
spinFill.BorderSizePixel = 0
spinFill.Parent = spinTrack
Instance.new("UICorner", spinFill).CornerRadius = UDim.new(1, 0)
local spinThumb = Instance.new("Frame")
spinThumb.Size = UDim2.new(0, 14, 0, 14)
spinThumb.AnchorPoint = Vector2.new(0.5, 0.5)
spinThumb.Position = UDim2.new(0, 0, 0.5, 0)
spinThumb.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
spinThumb.BorderSizePixel = 0
spinThumb.Parent = spinTrack
Instance.new("UICorner", spinThumb).CornerRadius = UDim.new(1, 0)
do
local spinThumbShadow = Instance.new("UIStroke")
spinThumbShadow.Color = Color3.fromRGB(0, 0, 0)
spinThumbShadow.Thickness = 1
spinThumbShadow.Transparency = 0.5
spinThumbShadow.Parent = spinThumb
end
local SPIN_MIN = 1
local SPIN_MAX = 500
local function spinUpdateSlider(animate)
local pct = math.clamp((_S.spinSpeed - SPIN_MIN) / (SPIN_MAX - SPIN_MIN), 0, 1)
if animate then
TweenService:Create(spinFill, TweenInfo.new(0.15), {Size = UDim2.new(pct, 0, 1, 0)}):Play()
TweenService:Create(spinThumb, TweenInfo.new(0.15), {Position = UDim2.new(pct, 0, 0.5, 0)}):Play()
else
spinFill.Size = UDim2.new(pct, 0, 1, 0)
spinThumb.Position = UDim2.new(pct, 0, 0.5, 0)
end
end
local spinDragging = false
spinTrack.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
spinDragging = true
local tp = spinTrack.AbsolutePosition.X
local ts = spinTrack.AbsoluteSize.X
local pct = math.clamp((input.Position.X - tp) / ts, 0, 1)
_S.spinSpeed = math.max(1, math.floor(SPIN_MIN + pct * (SPIN_MAX - SPIN_MIN)))
spinSpeedValueLabel.Text = tostring(_S.spinSpeed)
spinUpdateSlider(true)
end
end)
spinThumb.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
spinDragging = true
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
spinDragging = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if spinDragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local tp = spinTrack.AbsolutePosition.X
local ts = spinTrack.AbsoluteSize.X
local pct = math.clamp((input.Position.X - tp) / ts, 0, 1)
_S.spinSpeed = math.max(1, math.floor(SPIN_MIN + pct * (SPIN_MAX - SPIN_MIN)))
spinSpeedValueLabel.Text = tostring(_S.spinSpeed)
spinUpdateSlider(true)
end
end)
spinSpeedValueLabel:GetPropertyChangedSignal("Text"):Connect(function()
if not spinDragging then
local num = tonumber(spinSpeedValueLabel.Text)
if num then
local pct = math.clamp((num - SPIN_MIN) / (SPIN_MAX - SPIN_MIN), 0, 1)
TweenService:Create(spinFill, TweenInfo.new(0.15), {Size = UDim2.new(pct, 0, 1, 0)}):Play()
TweenService:Create(spinThumb, TweenInfo.new(0.15), {Position = UDim2.new(pct, 0, 0.5, 0)}):Play()
end
end
end)
spinUpdateSlider(false)
spinSpeedValueLabel.FocusLost:Connect(function()
local num = tonumber(spinSpeedValueLabel.Text)
if num then
_S.spinSpeed = math.max(1, math.floor(num))
spinSpeedValueLabel.Text = tostring(_S.spinSpeed)
else
spinSpeedValueLabel.Text = tostring(_S.spinSpeed)
end
end)
-- BR toggle: right arm toward crotch, up-down rotation
_S.brEnabled = false
_S.brConn = nil
_S.brCons = {}
_S.brRUA = nil
local brBtn = btn(aSection, "BR", UDim2.new(0, 0, 0, 448), UDim2.new(1, -2, 0, 24), Color3.fromRGB(50, 30, 60))
local setBRToggle = makeToggle(brBtn, "BR")
brBtn.MouseButton1Click:Connect(function()
_S.brEnabled = not _S.brEnabled
setBRToggle(_S.brEnabled)
local char = player.Character
if not char then return end
if _S.brEnabled then
local hum = char:FindFirstChildOfClass("Humanoid")
local anim = hum and hum:FindFirstChildOfClass("Animator")
if anim then
for _, tr in ipairs(anim:GetPlayingAnimationTracks()) do tr:Stop(0) end
end
local as = char:FindFirstChild("Animate")
if as then as.Disabled = true end
local lt = char:FindFirstChild("LowerTorso")
_S.brRUA = char:FindFirstChild("RightUpperArm")
if lt and _S.brRUA then
_S.brCons = {}
local ac = _S.brRUA:FindFirstChild("RightShoulder")
local bs = _S.brRUA:FindFirstChild("RightShoulderBallSocket")
if ac and ac:IsA("AnimationConstraint") then ac.Enabled = false; table.insert(_S.brCons, ac) end
if bs and bs:IsA("BallSocketConstraint") then bs.Enabled = false; table.insert(_S.brCons, bs) end
_S.brRUA.Anchored = true
_S.brConn = RunService.RenderStepped:Connect(function()
if not _S.brEnabled or not _S.brRUA or not _S.brRUA.Parent then return end
local lt2 = player.Character and player.Character:FindFirstChild("LowerTorso")
if not lt2 then return end
local bob = math.sin(tick() * 8) * 0.15
_S.brRUA.CFrame = lt2.CFrame * CFrame.new(0, -0.3 + bob, -0.5)
end)
end
else
if _S.brConn then _S.brConn:Disconnect(); _S.brConn = nil end
if _S.brRUA and _S.brRUA.Parent then _S.brRUA.Anchored = false end
_S.brRUA = nil
for _, c in ipairs(_S.brCons) do c.Enabled = true end
_S.brCons = {}
local as = char:FindFirstChild("Animate")
if as then as.Disabled = false end
end
end)
player.CharacterAdded:Connect(function()
if _S.brEnabled then task.wait(1) end
end)
_S.savedPosition = nil
_S.savedPlayerPosition = nil
-- === Section Position ===
local posSection = Instance.new("Frame")
posSection.Size = UDim2.new(1, -10, 0, 280)
posSection.Position = UDim2.new(0, 5, 0, 5)
posSection.BackgroundTransparency = 1
posSection.Parent = contentScroll
do
local posHeader = Instance.new("TextLabel")
posHeader.Size = UDim2.new(1, 0, 0, 18)
posHeader.BackgroundTransparency = 1
posHeader.Text = "Position"
posHeader.TextColor3 = Color3.fromRGB(255, 255, 255)
posHeader.Font = Enum.Font.SourceSansBold
posHeader.TextSize = 14
posHeader.TextXAlignment = Enum.TextXAlignment.Left
posHeader.Parent = posSection
end
do
local posDesc = Instance.new("TextLabel")
posDesc.Size = UDim2.new(1, 0, 0, 28)
posDesc.Position = UDim2.new(0, 0, 0, 18)
posDesc.BackgroundTransparency = 1
posDesc.Text = "Save Position: sauvegarde votre position actuelle. Save Pos Joueur Select: sauvegarde la position du joueur sélectionné dans Joueurs. TP Position: téléporte à la position sauvegardée (joueur sélectionné en priorité). TP SAVE AUTO ALT: téléporte automatiquement après la mort (méthode alternative). TP SAVE AUTO SIMPLE: téléporte automatiquement après la mort (méthode simple)."
posDesc.TextColor3 = Color3.fromRGB(255, 255, 255)
posDesc.Font = Enum.Font.SourceSans
posDesc.TextSize = 12
posDesc.TextWrapped = true
posDesc.TextTruncate = Enum.TextTruncate.AtEnd
posDesc.TextXAlignment = Enum.TextXAlignment.Left
posDesc.TextYAlignment = Enum.TextYAlignment.Top
posDesc.Parent = posSection
end
local savePosBtn = btn(posSection, "Save Position", UDim2.new(0, 0, 0, 48), UDim2.new(1, -2, 0, 24), Color3.fromRGB(45, 35, 55))
local tpPosBtn = btn(posSection, "TP Position", UDim2.new(0, 0, 0, 84), UDim2.new(1, -2, 0, 24), Color3.fromRGB(35, 45, 55))
local tpSavePosBtn = btn(posSection, "TP SAVE AUTO ALT", UDim2.new(0, 0, 0, 120), UDim2.new(1, -2, 0, 24), Color3.fromRGB(35, 55, 45))
local setTpSavePosToggle = makeToggle(tpSavePosBtn, "TP SAVE AUTO ALT")
local tpSaveSimpleBtn = btn(posSection, "TP SAVE AUTO SIMPLE", UDim2.new(0, 0, 0, 156), UDim2.new(1, -2, 0, 24), Color3.fromRGB(45, 55, 35))
local setTpSaveSimpleToggle = makeToggle(tpSaveSimpleBtn, "TP SAVE AUTO SIMPLE")
local savePlayerPosBtn = btn(posSection, "Save Pos Joueur Select", UDim2.new(0, 0, 0, 192), UDim2.new(1, -2, 0, 24), Color3.fromRGB(45, 35, 55))
local intervalCard = Instance.new("Frame")
intervalCard.Size = UDim2.new(1, -2, 0, 44)
intervalCard.Position = UDim2.new(0, 0, 0, 228)
intervalCard.BackgroundColor3 = Color3.fromRGB(22, 22, 28)
intervalCard.BackgroundTransparency = 0
intervalCard.BorderSizePixel = 0
intervalCard.Parent = posSection
Instance.new("UICorner", intervalCard).CornerRadius = UDim.new(0, 8)
do
local intervalStroke = Instance.new("UIStroke")
intervalStroke.Color = Color3.fromRGB(50, 50, 55)
intervalStroke.Thickness = 1
intervalStroke.Transparency = 0.3
intervalStroke.Parent = intervalCard
end
do
local intervalLabel = Instance.new("TextLabel")
intervalLabel.Size = UDim2.new(0, 80, 0, 16)
intervalLabel.Position = UDim2.new(0, 8, 0, 5)
intervalLabel.BackgroundTransparency = 1
intervalLabel.Text = "Interval"
intervalLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
intervalLabel.Font = Enum.Font.SourceSansBold
intervalLabel.TextSize = 13
intervalLabel.TextXAlignment = Enum.TextXAlignment.Left
intervalLabel.Parent = intervalCard
end
local intervalValueLabel = Instance.new("TextBox")
intervalValueLabel.Size = UDim2.new(0, 50, 0, 16)
intervalValueLabel.Position = UDim2.new(1, -58, 0, 5)
intervalValueLabel.BackgroundColor3 = Color3.fromRGB(22, 22, 28)
intervalValueLabel.BackgroundTransparency = 1
intervalValueLabel.Text = tostring(_S.tpSaveInterval)
intervalValueLabel.TextColor3 = Color3.fromRGB(255, 60, 60)
intervalValueLabel.Font = Enum.Font.SourceSansBold
intervalValueLabel.TextSize = 13
intervalValueLabel.BorderSizePixel = 0
intervalValueLabel.ClearTextOnFocus = false
intervalValueLabel.TextXAlignment = Enum.TextXAlignment.Right
intervalValueLabel.Parent = intervalCard
local intervalTrack = Instance.new("Frame")
intervalTrack.Size = UDim2.new(1, -16, 0, 4)
intervalTrack.Position = UDim2.new(0, 8, 0, 30)
intervalTrack.BackgroundColor3 = Color3.fromRGB(12, 12, 16)
intervalTrack.BorderSizePixel = 0
intervalTrack.Parent = intervalCard
Instance.new("UICorner", intervalTrack).CornerRadius = UDim.new(1, 0)
local intervalFill = Instance.new("Frame")
intervalFill.Size = UDim2.new(0, 0, 1, 0)
intervalFill.BackgroundColor3 = Color3.fromRGB(220, 50, 50)
intervalFill.BorderSizePixel = 0
intervalFill.Parent = intervalTrack
Instance.new("UICorner", intervalFill).CornerRadius = UDim.new(1, 0)
local intervalThumb = Instance.new("Frame")
intervalThumb.Size = UDim2.new(0, 14, 0, 14)
intervalThumb.AnchorPoint = Vector2.new(0.5, 0.5)
intervalThumb.Position = UDim2.new(0, 0, 0.5, 0)
intervalThumb.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
intervalThumb.BorderSizePixel = 0
intervalThumb.Parent = intervalTrack
Instance.new("UICorner", intervalThumb).CornerRadius = UDim.new(1, 0)
do
local intervalThumbShadow = Instance.new("UIStroke")
intervalThumbShadow.Color = Color3.fromRGB(0, 0, 0)
intervalThumbShadow.Thickness = 1
intervalThumbShadow.Transparency = 0.5
intervalThumbShadow.Parent = intervalThumb
end
local intervalDownBtn = Instance.new("TextButton")
intervalDownBtn.Visible = false
intervalDownBtn.Parent = intervalCard
local intervalUpBtn = Instance.new("TextButton")
intervalUpBtn.Visible = false
intervalUpBtn.Parent = intervalCard
local INTERVAL_MIN = 0.1
local INTERVAL_MAX = 10
local function intervalUpdateSlider(animate)
local pct = math.clamp((_S.tpSaveInterval - INTERVAL_MIN) / (INTERVAL_MAX - INTERVAL_MIN), 0, 1)
if animate then
TweenService:Create(intervalFill, TweenInfo.new(0.15), {Size = UDim2.new(pct, 0, 1, 0)}):Play()
TweenService:Create(intervalThumb, TweenInfo.new(0.15), {Position = UDim2.new(pct, 0, 0.5, 0)}):Play()
else
intervalFill.Size = UDim2.new(pct, 0, 1, 0)
intervalThumb.Position = UDim2.new(pct, 0, 0.5, 0)
end
end
local intervalDragging = false
intervalTrack.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
intervalDragging = true
local tp = intervalTrack.AbsolutePosition.X
local ts = intervalTrack.AbsoluteSize.X
local pct = math.clamp((input.Position.X - tp) / ts, 0, 1)
_S.tpSaveInterval = math.max(0.1, INTERVAL_MIN + pct * (INTERVAL_MAX - INTERVAL_MIN))
intervalValueLabel.Text = tostring(_S.tpSaveInterval)
intervalUpdateSlider(true)
end
end)
intervalThumb.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
intervalDragging = true
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
intervalDragging = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if intervalDragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local tp = intervalTrack.AbsolutePosition.X
local ts = intervalTrack.AbsoluteSize.X
local pct = math.clamp((input.Position.X - tp) / ts, 0, 1)
_S.tpSaveInterval = math.max(0.1, INTERVAL_MIN + pct * (INTERVAL_MAX - INTERVAL_MIN))
intervalValueLabel.Text = tostring(_S.tpSaveInterval)
intervalUpdateSlider(true)
end
end)
intervalValueLabel:GetPropertyChangedSignal("Text"):Connect(function()
if not intervalDragging then
local num = tonumber(intervalValueLabel.Text)
if num then
local pct = math.clamp((num - INTERVAL_MIN) / (INTERVAL_MAX - INTERVAL_MIN), 0, 1)
TweenService:Create(intervalFill, TweenInfo.new(0.15), {Size = UDim2.new(pct, 0, 1, 0)}):Play()
TweenService:Create(intervalThumb, TweenInfo.new(0.15), {Position = UDim2.new(pct, 0, 0.5, 0)}):Play()
end
end
end)
intervalUpdateSlider(false)
intervalValueLabel.FocusLost:Connect(function()
local num = tonumber(intervalValueLabel.Text)
if num then
_S.tpSaveInterval = math.max(0.1, num)
intervalValueLabel.Text = tostring(_S.tpSaveInterval)
intervalUpdateSlider(true)
else
intervalValueLabel.Text = tostring(_S.tpSaveInterval)
intervalUpdateSlider(true)
end
end)
-- === Section Voice Chat ===
local vSection = Instance.new("Frame")
vSection.Size = UDim2.new(1, -10, 0, 80)
vSection.Position = UDim2.new(0, 5, 0, 5)
vSection.BackgroundTransparency = 1
vSection.Parent = contentScroll
do
local vHeader = Instance.new("TextLabel")
vHeader.Size = UDim2.new(1, 0, 0, 18)
vHeader.BackgroundTransparency = 1
vHeader.Text = "Voice Chat"
vHeader.TextColor3 = Color3.fromRGB(255, 255, 255)
vHeader.Font = Enum.Font.SourceSansBold
vHeader.TextSize = 14
vHeader.TextXAlignment = Enum.TextXAlignment.Left
vHeader.Parent = vSection
end
do
local vDesc = Instance.new("TextLabel")
vDesc.Size = UDim2.new(1, 0, 0, 28)
vDesc.Position = UDim2.new(0, 0, 0, 18)
vDesc.BackgroundTransparency = 1
vDesc.Text = "Sélectionnez d'abord un joueur dans la catégorie Joueurs, puis utilisez Vol - et Vol + pour réduire ou augmenter son volume vocal. Le volume actuel est affiché entre les deux boutons."
vDesc.TextColor3 = Color3.fromRGB(255, 255, 255)
vDesc.Font = Enum.Font.SourceSans
vDesc.TextSize = 12
vDesc.TextWrapped = true
vDesc.TextTruncate = Enum.TextTruncate.AtEnd
vDesc.TextXAlignment = Enum.TextXAlignment.Left
vDesc.TextYAlignment = Enum.TextYAlignment.Top
vDesc.Parent = vSection
end
local volDownBtn = btn(vSection, "Vol -", UDim2.new(0, 0, 0, 48), UDim2.new(0.18, -2, 0, 24), Color3.fromRGB(40, 30, 50))
local volLabel = Instance.new("TextBox")
volLabel.Size = UDim2.new(0.58, -2, 0, 24)
volLabel.Position = UDim2.new(0.22, 0, 0, 48)
volLabel.BackgroundColor3 = Color3.fromRGB(30, 30, 45)
volLabel.BackgroundTransparency = 0
volLabel.Text = "Vol: 100%"
volLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
volLabel.Font = Enum.Font.SourceSans
volLabel.TextSize = 14
volLabel.BorderSizePixel = 0
volLabel.ClearTextOnFocus = false
volLabel.Parent = vSection
Instance.new("UICorner", volLabel).CornerRadius = UDim.new(0, 4)
local volUpBtn = btn(vSection, "Vol +", UDim2.new(0.82, 0, 0, 48), UDim2.new(0.18, -2, 0, 24), Color3.fromRGB(40, 30, 50))
-- === Section Auto ===
local auSection = Instance.new("Frame")
auSection.Size = UDim2.new(1, -10, 0, 176)
auSection.Position = UDim2.new(0, 5, 0, 5)
auSection.BackgroundTransparency = 1
auSection.Parent = contentScroll
do
local auHeader = Instance.new("TextLabel")
auHeader.Size = UDim2.new(1, 0, 0, 18)
auHeader.BackgroundTransparency = 1
auHeader.Text = "Auto"
auHeader.TextColor3 = Color3.fromRGB(255, 255, 255)
auHeader.Font = Enum.Font.SourceSansBold
auHeader.TextSize = 14
auHeader.TextXAlignment = Enum.TextXAlignment.Left
auHeader.Parent = auSection
end
do
local auDesc = Instance.new("TextLabel")
auDesc.Size = UDim2.new(1, 0, 0, 28)
auDesc.Position = UDim2.new(0, 0, 0, 18)
auDesc.BackgroundTransparency = 1
auDesc.Text = "AFK: active le mode anti-AFK (empêche d'être kické pour inactivité). Jump Infini: permet de sauter indéfiniment en maintenant la barre espace. Auto Rejoin: relance automatiquement le jeu si vous êtes déconnecté. Cliquez sur chaque bouton pour activer/désactiver."
auDesc.TextColor3 = Color3.fromRGB(255, 255, 255)
auDesc.Font = Enum.Font.SourceSans
auDesc.TextSize = 12
auDesc.TextWrapped = true
auDesc.TextTruncate = Enum.TextTruncate.AtEnd
auDesc.TextXAlignment = Enum.TextXAlignment.Left
auDesc.TextYAlignment = Enum.TextYAlignment.Top
auDesc.Parent = auSection
end
local afkBtn = btn(auSection, "AFK", UDim2.new(0, 0, 0, 48), UDim2.new(1, -2, 0, 24), Color3.fromRGB(30, 50, 50))
local setAfkToggle = makeToggle(afkBtn, "AFK")
local autoRejoinBtn = btn(auSection, "Auto Rejoin", UDim2.new(0, 0, 0, 84), UDim2.new(1, -2, 0, 24), Color3.fromRGB(50, 40, 30))
local jumpInfiniteBtn = btn(auSection, "Jump Infini", UDim2.new(0, 0, 0, 120), UDim2.new(1, -2, 0, 24), Color3.fromRGB(40, 50, 30))
local setJumpInfiniteToggle = makeToggle(jumpInfiniteBtn, "Jump Infini")
-- === Section Lock ===
local lockSection = Instance.new("Frame")
lockSection.Size = UDim2.new(1, -10, 0, 315)
lockSection.Position = UDim2.new(0, 5, 0, 5)
lockSection.BackgroundTransparency = 1
lockSection.Parent = contentScroll
do
local lockHeader = Instance.new("TextLabel")
lockHeader.Size = UDim2.new(1, 0, 0, 18)
lockHeader.BackgroundTransparency = 1
lockHeader.Text = "Lock"
lockHeader.TextColor3 = Color3.fromRGB(255, 255, 255)
lockHeader.Font = Enum.Font.SourceSansBold
lockHeader.TextSize = 14
lockHeader.TextXAlignment = Enum.TextXAlignment.Left
lockHeader.Parent = lockSection
end
do
local lockDesc = Instance.new("TextLabel")
lockDesc.Size = UDim2.new(1, 0, 0, 28)
lockDesc.Position = UDim2.new(0, 0, 0, 18)
lockDesc.BackgroundTransparency = 1
lockDesc.Text = "Lock Joueur: verrouille la caméra sur tous les joueurs. Lock Select: verrouille sur le joueur sélectionné dans Joueurs. Lock Equipe Adverse: verrouille sur l'équipe adverse. Utilisez les sliders - et + pour ajuster la portée de verrouillage (Infini = portée illimitée)."
lockDesc.TextColor3 = Color3.fromRGB(255, 255, 255)
lockDesc.Font = Enum.Font.SourceSans
lockDesc.TextSize = 12
lockDesc.TextWrapped = true
lockDesc.TextTruncate = Enum.TextTruncate.AtEnd
lockDesc.TextXAlignment = Enum.TextXAlignment.Left
lockDesc.TextYAlignment = Enum.TextYAlignment.Top
lockDesc.Parent = lockSection
end
local lockAllBtn = btn(lockSection, "Lock Joueur", UDim2.new(0, 0, 0, 48), UDim2.new(1, -2, 0, 24), Color3.fromRGB(50, 30, 30))
local setLockAllToggle = makeToggle(lockAllBtn, "Lock Joueur")
local lockSelBtn = btn(lockSection, "Lock Select", UDim2.new(0, 0, 0, 84), UDim2.new(1, -2, 0, 24), Color3.fromRGB(50, 30, 30))
local setLockSelToggle = makeToggle(lockSelBtn, "Lock Select")
local lockEnemyBtn = btn(lockSection, "Lock Equipe Adverse", UDim2.new(0, 0, 0, 120), UDim2.new(1, -2, 0, 24), Color3.fromRGB(50, 30, 30))
local setLockEnemyToggle = makeToggle(lockEnemyBtn, "Lock Equipe Adverse")
-- Slider control for lock range
local function makeRangeControl(parent, posY, size, label, rangeKey)
local card = Instance.new("Frame")
card.Size = size
card.Position = posY
card.BackgroundColor3 = Color3.fromRGB(22, 22, 28)
card.BackgroundTransparency = 0
card.BorderSizePixel = 0
card.Parent = parent
Instance.new("UICorner", card).CornerRadius = UDim.new(0, 8)
do
local cardStroke = Instance.new("UIStroke")
cardStroke.Color = Color3.fromRGB(50, 50, 55)
cardStroke.Thickness = 1
cardStroke.Transparency = 0.3
cardStroke.Parent = card
end
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(0, 100, 0, 16)
lbl.Position = UDim2.new(0, 8, 0, 5)
lbl.BackgroundTransparency = 1
lbl.Text = label
lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
lbl.Font = Enum.Font.SourceSansBold
lbl.TextSize = 13
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Parent = card
local valBox = Instance.new("TextBox")
valBox.Size = UDim2.new(0, 60, 0, 16)
valBox.Position = UDim2.new(1, -68, 0, 5)
valBox.BackgroundColor3 = Color3.fromRGB(22, 22, 28)
valBox.BackgroundTransparency = 1
valBox.Text = _S.lockRanges[rangeKey] == math.huge and "Infini" or tostring(_S.lockRanges[rangeKey])
valBox.TextColor3 = Color3.fromRGB(255, 60, 60)
valBox.Font = Enum.Font.SourceSansBold
valBox.TextSize = 13
valBox.BorderSizePixel = 0
valBox.ClearTextOnFocus = false
valBox.TextXAlignment = Enum.TextXAlignment.Right
valBox.Parent = card
local track = Instance.new("Frame")
track.Size = UDim2.new(1, -16, 0, 4)
track.Position = UDim2.new(0, 8, 0, 30)
track.BackgroundColor3 = Color3.fromRGB(12, 12, 16)
track.BorderSizePixel = 0
track.Parent = card
Instance.new("UICorner", track).CornerRadius = UDim.new(1, 0)
local fill = Instance.new("Frame")
fill.Size = UDim2.new(0, 0, 1, 0)
fill.BackgroundColor3 = Color3.fromRGB(220, 50, 50)
fill.BorderSizePixel = 0
fill.Parent = track
Instance.new("UICorner", fill).CornerRadius = UDim.new(1, 0)
local thumb = Instance.new("Frame")
thumb.Size = UDim2.new(0, 14, 0, 14)
thumb.AnchorPoint = Vector2.new(0.5, 0.5)
thumb.Position = UDim2.new(0, 0, 0.5, 0)
thumb.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
thumb.BorderSizePixel = 0
thumb.Parent = track
Instance.new("UICorner", thumb).CornerRadius = UDim.new(1, 0)
do
local thumbShadow = Instance.new("UIStroke")
thumbShadow.Color = Color3.fromRGB(0, 0, 0)
thumbShadow.Thickness = 1
thumbShadow.Transparency = 0.5
thumbShadow.Parent = thumb
end
local downBtn = Instance.new("TextButton")
downBtn.Visible = false
downBtn.Parent = card
addBtnSound(downBtn)
local upBtn = Instance.new("TextButton")
upBtn.Visible = false
upBtn.Parent = card
addBtnSound(upBtn)
local RANGE_MIN = 10
local RANGE_MAX = 1000
local function updateLabel()
valBox.Text = _S.lockRanges[rangeKey] == math.huge and "Infini" or tostring(_S.lockRanges[rangeKey])
end
local function updateSlider(animate)
local val = _S.lockRanges[rangeKey]
local pct
if val == math.huge then
pct = 1
else
pct = math.clamp((val - RANGE_MIN) / (RANGE_MAX - RANGE_MIN), 0, 1)
end
if animate then
TweenService:Create(fill, TweenInfo.new(0.15), {Size = UDim2.new(pct, 0, 1, 0)}):Play()
TweenService:Create(thumb, TweenInfo.new(0.15), {Position = UDim2.new(pct, 0, 0.5, 0)}):Play()
else
fill.Size = UDim2.new(pct, 0, 1, 0)
thumb.Position = UDim2.new(pct, 0, 0.5, 0)
end
end
local dragging = false
track.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
local tp = track.AbsolutePosition.X
local ts = track.AbsoluteSize.X
local pct = math.clamp((input.Position.X - tp) / ts, 0, 1)
if pct >= 0.99 then
_S.lockRanges[rangeKey] = math.huge
else
_S.lockRanges[rangeKey] = math.max(RANGE_MIN, math.floor(RANGE_MIN + pct * (RANGE_MAX - RANGE_MIN)))
end
updateLabel()
updateSlider(true)
end
end)
thumb.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = false
end
end)
UserInputService.InputChanged:Connect(function(input)
if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local tp = track.AbsolutePosition.X
local ts = track.AbsoluteSize.X
local pct = math.clamp((input.Position.X - tp) / ts, 0, 1)
if pct >= 0.99 then
_S.lockRanges[rangeKey] = math.huge
else
_S.lockRanges[rangeKey] = math.max(RANGE_MIN, math.floor(RANGE_MIN + pct * (RANGE_MAX - RANGE_MIN)))
end
updateLabel()
updateSlider(true)
end
end)
valBox:GetPropertyChangedSignal("Text"):Connect(function()
if not dragging then
local val = _S.lockRanges[rangeKey]
local pct
if val == math.huge then
pct = 1
else
pct = math.clamp((val - RANGE_MIN) / (RANGE_MAX - RANGE_MIN), 0, 1)
end
TweenService:Create(fill, TweenInfo.new(0.15), {Size = UDim2.new(pct, 0, 1, 0)}):Play()
TweenService:Create(thumb, TweenInfo.new(0.15), {Position = UDim2.new(pct, 0, 0.5, 0)}):Play()
end
end)
downBtn.MouseButton1Click:Connect(function()
local r = _S.lockRanges[rangeKey]
if r == math.huge then
_S.lockRanges[rangeKey] = 500
elseif r > 50 then
_S.lockRanges[rangeKey] = r - 50
else
_S.lockRanges[rangeKey] = 10
end
updateLabel()
end)
upBtn.MouseButton1Click:Connect(function()
local r = _S.lockRanges[rangeKey]
if r == math.huge then
return
elseif r >= 500 then
_S.lockRanges[rangeKey] = math.huge
else
_S.lockRanges[rangeKey] = r + 50
end
updateLabel()
end)
valBox.FocusLost:Connect(function()
local txt = valBox.Text:lower()
if txt == "infini" or txt == "inf" or txt == "infinite" then
_S.lockRanges[rangeKey] = math.huge
else
local num = tonumber(txt)
if num then
_S.lockRanges[rangeKey] = math.max(10, math.floor(num))
end
end
updateLabel()
end)
updateSlider(false)
end
-- Range controls pour chaque lock
do
makeRangeControl(lockSection, UDim2.new(0, 0, 0, 156), UDim2.new(1, -2, 0, 44), "R:Joueur", "all")
makeRangeControl(lockSection, UDim2.new(0, 0, 0, 208), UDim2.new(1, -2, 0, 44), "R:Select", "sel")
makeRangeControl(lockSection, UDim2.new(0, 0, 0, 260), UDim2.new(1, -2, 0, 44), "R:Equipe Adv.", "enemy")
end
-- === Section Infos ===
local iSection = Instance.new("Frame")
iSection.Size = UDim2.new(1, -10, 0, 348)
iSection.Position = UDim2.new(0, 5, 0, 5)
iSection.BackgroundTransparency = 1
iSection.Parent = contentScroll
do
local iHeader = Instance.new("TextLabel")
iHeader.Size = UDim2.new(1, 0, 0, 18)
iHeader.BackgroundTransparency = 1
iHeader.Text = "Infos"
iHeader.TextColor3 = Color3.fromRGB(255, 255, 255)
iHeader.Font = Enum.Font.SourceSansBold
iHeader.TextSize = 14
iHeader.TextXAlignment = Enum.TextXAlignment.Left
iHeader.Parent = iSection
end
do
local iDesc = Instance.new("TextLabel")
iDesc.Size = UDim2.new(1, 0, 0, 28)
iDesc.Position = UDim2.new(0, 0, 0, 18)
iDesc.BackgroundTransparency = 1
iDesc.Text = "Voir mon sac: affiche tous les outils que vous possédez actuellement. Profil joueur: affiche les informations détaillées d'un joueur (sélectionnez-le d'abord dans la catégorie Joueurs)."
iDesc.TextColor3 = Color3.fromRGB(255, 255, 255)
iDesc.Font = Enum.Font.SourceSans
iDesc.TextSize = 12
iDesc.TextWrapped = true
iDesc.TextTruncate = Enum.TextTruncate.AtEnd
iDesc.TextXAlignment = Enum.TextXAlignment.Left
iDesc.TextYAlignment = Enum.TextYAlignment.Top
iDesc.Parent = iSection
end
local bagBtn = btn(iSection, "Voir mon sac", UDim2.new(0, 0, 0, 48), UDim2.new(1, -2, 0, 24), Color3.fromRGB(30, 50, 50))
local profileBtn = btn(iSection, "Profil joueur", UDim2.new(0, 0, 0, 84), UDim2.new(1, -2, 0, 24), Color3.fromRGB(50, 40, 60))
-- === Section Paramètres ===
local paramSection = Instance.new("Frame")
paramSection.Size = UDim2.new(1, -10, 0, 280)
paramSection.Position = UDim2.new(0, 5, 0, 5)
paramSection.BackgroundTransparency = 1
paramSection.Parent = contentScroll
do
local paramHeader = Instance.new("TextLabel")
paramHeader.Size = UDim2.new(1, 0, 0, 18)
paramHeader.BackgroundTransparency = 1
paramHeader.Text = "Paramètres"
paramHeader.TextColor3 = Color3.fromRGB(255, 255, 255)
paramHeader.Font = Enum.Font.SourceSansBold
paramHeader.TextSize = 14
paramHeader.TextXAlignment = Enum.TextXAlignment.Left
paramHeader.Parent = paramSection
end
do
local paramDesc = Instance.new("TextLabel")
paramDesc.Size = UDim2.new(1, 0, 0, 28)
paramDesc.Position = UDim2.new(0, 0, 0, 18)
paramDesc.BackgroundTransparency = 1
paramDesc.Text = "Personnalisez le panel: changez la couleur du panel, des boutons et des catégories. Choisissez un son de clic parmi Original, Click, Pop, Modern ou Aucun. Réinitialiser: restaure tous les réglages par défaut. Supprimer le panel: désactive toutes les fonctionnalités, tue Omega et supprime complètement le panel REDTIGER."
paramDesc.TextColor3 = Color3.fromRGB(255, 255, 255)
paramDesc.Font = Enum.Font.SourceSans
paramDesc.TextSize = 12
paramDesc.TextWrapped = true
paramDesc.TextTruncate = Enum.TextTruncate.AtEnd
paramDesc.TextXAlignment = Enum.TextXAlignment.Left
paramDesc.TextYAlignment = Enum.TextYAlignment.Top
paramDesc.Parent = paramSection
end
-- === Personnalisation du Panel ===
-- Valeurs originales pour le reset
local originalColors = {
panel = Color3.fromRGB(8, 8, 12),
titleBar = Color3.fromRGB(18, 18, 28),
navBar = Color3.fromRGB(14, 14, 22),
contentScroll = Color3.fromRGB(8, 8, 12),
profileCard = Color3.fromRGB(14, 14, 22),
btnDefault = Color3.fromRGB(120, 30, 30),
navColor = Color3.fromRGB(60, 60, 65),
navActiveColor = Color3.fromRGB(100, 100, 110),
}
local originalSoundId = "rbxassetid://88442833509532"
-- Helper: creer un echantillon de couleur
local function makeColorSwatch(parent, color, posY, posX, onClick)
local swatch = Instance.new("TextButton")
swatch.Size = UDim2.new(0, 22, 0, 22)
swatch.Position = UDim2.new(0, posX, 0, posY)
swatch.BackgroundColor3 = color
swatch.Text = ""
swatch.BorderSizePixel = 1
swatch.BorderColor3 = Color3.fromRGB(80, 80, 90)
swatch.Parent = parent
Instance.new("UICorner", swatch).CornerRadius = UDim.new(0, 4)
addBtnSound(swatch)
swatch.MouseButton1Click:Connect(function()
onClick(color)
end)
return swatch
end
-- Appliquer la couleur du panel
local function applyPanelColor(c)
panel.BackgroundColor3 = c
titleBar.BackgroundColor3 = Color3.new(
math.min(c.R + 0.04, 1),
math.min(c.G + 0.04, 1),
math.min(c.B + 0.04, 1)
)
navBar.BackgroundColor3 = Color3.new(
math.min(c.R + 0.03, 1),
math.min(c.G + 0.03, 1),
math.min(c.B + 0.03, 1)
)
contentScroll.BackgroundColor3 = c
profileCard.BackgroundColor3 = Color3.new(
math.min(c.R + 0.03, 1),
math.min(c.G + 0.03, 1),
math.min(c.B + 0.03, 1)
)
end
-- Appliquer la couleur des boutons
local function applyButtonColor(c)
_S.customBtnColor = c
if _S.allButtons then
for _, b in ipairs(_S.allButtons) do
pcall(function()
b.BackgroundColor3 = c
end)
end
end
for name, navBtn in pairs(navButtons) do
pcall(function()
if name == currentPage then
navBtn.BackgroundColor3 = _S.customNavActiveColor or Color3.fromRGB(100, 100, 110)
else
navBtn.BackgroundColor3 = _S.customNavColor or Color3.fromRGB(60, 60, 65)
end
end)
end
end
local function applyNavColor(c, isActive)
if isActive then
_S.customNavActiveColor = c
else
_S.customNavColor = c
end
for name, navBtn in pairs(navButtons) do
pcall(function()
if name == currentPage then
navBtn.BackgroundColor3 = _S.customNavActiveColor or Color3.fromRGB(100, 100, 110)
else
navBtn.BackgroundColor3 = _S.customNavColor or Color3.fromRGB(60, 60, 65)
end
end)
end
end
-- Appliquer le son des boutons
local ContentProvider = game:GetService("ContentProvider")
local function applySound(soundId)
if soundId and soundId ~= "" then
hoverSound.SoundId = soundId
clickSound.SoundId = soundId
task.spawn(function()
ContentProvider:PreloadAsync({hoverSound, clickSound})
end)
else
hoverSound.SoundId = ""
clickSound.SoundId = ""
end
end
-- === UI: Couleur du Panel ===
do
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, 0, 0, 14)
lbl.Position = UDim2.new(0, 0, 0, 50)
lbl.BackgroundTransparency = 1
lbl.Text = "Couleur du Panel"
lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
lbl.Font = Enum.Font.SourceSansBold
lbl.TextSize = 13
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Parent = paramSection
local panelColors = {
Color3.fromRGB(8, 8, 12),
Color3.fromRGB(8, 12, 30),
Color3.fromRGB(8, 30, 12),
Color3.fromRGB(20, 8, 30),
Color3.fromRGB(30, 8, 8),
Color3.fromRGB(30, 25, 10),
Color3.fromRGB(10, 10, 10),
Color3.fromRGB(25, 20, 30),
}
for i, c in ipairs(panelColors) do
makeColorSwatch(paramSection, c, 68, (i - 1) * 26, applyPanelColor)
end
end
-- === UI: Couleur des Boutons ===
do
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, 0, 0, 14)
lbl.Position = UDim2.new(0, 0, 0, 96)
lbl.BackgroundTransparency = 1
lbl.Text = "Couleur des Boutons"
lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
lbl.Font = Enum.Font.SourceSansBold
lbl.TextSize = 13
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Parent = paramSection
local btnColors = {
Color3.fromRGB(120, 30, 30),
Color3.fromRGB(30, 60, 120),
Color3.fromRGB(30, 120, 50),
Color3.fromRGB(80, 30, 120),
Color3.fromRGB(150, 80, 30),
Color3.fromRGB(50, 50, 60),
Color3.fromRGB(120, 100, 30),
Color3.fromRGB(30, 100, 100),
}
for i, c in ipairs(btnColors) do
makeColorSwatch(paramSection, c, 114, (i - 1) * 26, applyButtonColor)
end
end
-- === UI: Couleur des Categories ===
do
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, 0, 0, 14)
lbl.Position = UDim2.new(0, 0, 0, 142)
lbl.BackgroundTransparency = 1
lbl.Text = "Couleur des Categories"
lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
lbl.Font = Enum.Font.SourceSansBold
lbl.TextSize = 13
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Parent = paramSection
local navColors = {
Color3.fromRGB(60, 60, 65),
Color3.fromRGB(30, 50, 80),
Color3.fromRGB(50, 30, 80),
Color3.fromRGB(30, 70, 50),
Color3.fromRGB(80, 60, 30),
Color3.fromRGB(70, 30, 60),
Color3.fromRGB(40, 40, 80),
Color3.fromRGB(80, 50, 50),
}
for i, c in ipairs(navColors) do
makeColorSwatch(paramSection, c, 160, (i - 1) * 26, function(color)
applyNavColor(color, false)
end)
end
end
-- === UI: Son des Boutons ===
do
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, 0, 0, 14)
lbl.Position = UDim2.new(0, 0, 0, 188)
lbl.BackgroundTransparency = 1
lbl.Text = "Son des Boutons"
lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
lbl.Font = Enum.Font.SourceSansBold
lbl.TextSize = 13
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.Parent = paramSection
local soundOptions = {
{name = "Original", id = "rbxassetid://88442833509532"},
{name = "Click", id = "rbxassetid://9065073444"},
{name = "Pop", id = "rbxassetid://72264591133889"},
{name = "Modern", id = "rbxassetid://119393948345399"},
{name = "Aucun", id = ""},
}
for i, opt in ipairs(soundOptions) do
local soundBtn = btn(paramSection, opt.name, UDim2.new(0, (i - 1) * 48, 0, 204), UDim2.new(0, 44, 0, 20))
soundBtn.TextSize = 12
soundBtn.MouseButton1Click:Connect(function()
applySound(opt.id)
if opt.id and opt.id ~= "" then
task.wait(0.1)
clickSound:Play()
end
end)
end
end
-- === UI: Reinitialiser ===
do
local resetBtn = btn(paramSection, "Reinitialiser", UDim2.new(0, 0, 0, 230), UDim2.new(1, -2, 0, 22), Color3.fromRGB(50, 50, 60))
resetBtn.Font = Enum.Font.SourceSansBold
resetBtn.TextSize = 14
resetBtn.MouseButton1Click:Connect(function()
applyPanelColor(originalColors.panel)
applyButtonColor(originalColors.btnDefault)
_S.customBtnColor = nil
_S.customNavColor = nil
_S.customNavActiveColor = nil
applyNavColor(originalColors.navColor, false)
applyNavColor(originalColors.navActiveColor, true)
applySound(originalSoundId)
end)
end
local killPanelBtn = btn(paramSection, "Supprimer le panel", UDim2.new(0, 0, 0, 256), UDim2.new(1, -2, 0, 24), Color3.fromRGB(150, 30, 30))
killPanelBtn.Font = Enum.Font.SourceSansBold
killPanelBtn.TextSize = 15
-- Enregistrer les pages dans le système de navigation
registerPage("Joueurs", pSection)
registerPage("Deplacement", mSection)
registerPage("Actions", aSection)
registerPage("Position", posSection)
registerPage("Voice", vSection)
registerPage("Auto", auSection)
registerPage("Lock", lockSection)
registerPage("Infos", iSection)
registerPage("Parametres", paramSection)
-- Afficher la première page par défaut
switchPage("Joueurs")
local bagFrame, profileFrame
do
-- === Page 2 (Omega) ===
local page2 = Instance.new("Frame")
page2.Size = UDim2.new(1, -10, 0, 200)
page2.Position = UDim2.new(0, 5, 0, 5)
page2.BackgroundColor3 = Color3.fromRGB(8, 8, 12)
page2.BackgroundTransparency = 1
page2.BorderSizePixel = 0
page2.Visible = false
page2.Parent = contentScroll
Instance.new("UICorner", page2).CornerRadius = UDim.new(0, 10)
-- Omega header
local omegaHeader = Instance.new("TextLabel")
omegaHeader.Size = UDim2.new(1, -20, 0, 18)
omegaHeader.Position = UDim2.new(0, 10, 0, 10)
omegaHeader.BackgroundTransparency = 1
omegaHeader.Text = "Omega"
omegaHeader.TextColor3 = Color3.fromRGB(255, 255, 255)
omegaHeader.Font = Enum.Font.SourceSansBold
omegaHeader.TextSize = 14
omegaHeader.TextXAlignment = Enum.TextXAlignment.Left
omegaHeader.Parent = page2
do
local oDesc = Instance.new("TextLabel")
oDesc.Size = UDim2.new(1, -20, 0, 28)
oDesc.Position = UDim2.new(0, 10, 0, 28)
oDesc.BackgroundTransparency = 1
oDesc.Text = "Executer Omega: lance le script Omega. Cacher Omega: masque l'interface Omega. Afficher Omega: réaffiche l'interface Omega. Kill Omega: arrête complètement Omega et libère les ressources."
oDesc.TextColor3 = Color3.fromRGB(255, 255, 255)
oDesc.Font = Enum.Font.SourceSans
oDesc.TextSize = 12
oDesc.TextWrapped = true
oDesc.TextTruncate = Enum.TextTruncate.AtEnd
oDesc.TextXAlignment = Enum.TextXAlignment.Left
oDesc.TextYAlignment = Enum.TextYAlignment.Top
oDesc.Parent = page2
end
local executeOmegaBtn = btn(page2, "Executer Omega", UDim2.new(0, 10, 0, 60), UDim2.new(1, -20, 0, 25), Color3.fromRGB(100, 30, 120))
local hideOmegaBtn = btn(page2, "Cacher Omega", UDim2.new(0, 10, 0, 96), UDim2.new(1, -20, 0, 25), Color3.fromRGB(180, 100, 30))
local setHideOmegaToggle = makeToggle(hideOmegaBtn, "Cacher Omega")
local showOmegaBtn = btn(page2, "Afficher Omega", UDim2.new(0, 10, 0, 132), UDim2.new(1, -20, 0, 25), Color3.fromRGB(30, 130, 50))
local setShowOmegaToggle = makeToggle(showOmegaBtn, "Afficher Omega")
local killOmegaBtn = btn(page2, "Kill Omega", UDim2.new(0, 10, 0, 168), UDim2.new(1, -20, 0, 25), Color3.fromRGB(180, 40, 40))
-- Initially disable Hide/Show buttons until Omega is executed
hideOmegaBtn.Active = false
hideOmegaBtn.AutoButtonColor = false
hideOmegaBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
showOmegaBtn.Active = false
showOmegaBtn.AutoButtonColor = false
showOmegaBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
killOmegaBtn.Active = false
killOmegaBtn.AutoButtonColor = false
killOmegaBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
registerPage("Omega", page2)
-- Sac (backpack viewer - items cliquables)
bagFrame = Instance.new("ScrollingFrame")
bagFrame.Size = UDim2.new(1, 0, 0, 200)
bagFrame.Position = UDim2.new(0, 0, 0, 140)
bagFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
bagFrame.BackgroundTransparency = 0
bagFrame.BorderSizePixel = 0
bagFrame.ScrollBarThickness = 4
bagFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y
bagFrame.CanvasSize = UDim2.new(0, 0, 0, 0)
bagFrame.Visible = false
bagFrame.Parent = iSection
Instance.new("UICorner", bagFrame).CornerRadius = UDim.new(0, 4)
Instance.new("UIListLayout", bagFrame).Padding = UDim.new(0, 1)
-- Profil frame
profileFrame = Instance.new("ScrollingFrame")
profileFrame.Size = UDim2.new(1, 0, 0, 200)
profileFrame.Position = UDim2.new(0, 0, 0, 140)
profileFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
profileFrame.BackgroundTransparency = 0
profileFrame.BorderSizePixel = 0
profileFrame.ScrollBarThickness = 4
profileFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y
profileFrame.CanvasSize = UDim2.new(0, 0, 0, 0)
profileFrame.Visible = false
profileFrame.Parent = iSection
Instance.new("UICorner", profileFrame).CornerRadius = UDim.new(0, 4)
Instance.new("UIListLayout", profileFrame).Padding = UDim.new(0, 2)
-- EXECUTE SCRIPT
local function createFakeRunService()
return setmetatable({}, {
__index = function(t, k)
if _S.omegaKilled then
if k == "BindToRenderStep" or k == "UnbindFromRenderStep" then
return function() end
end
if k == "RenderStepped" or k == "Heartbeat" or k == "Stepped" then
return setmetatable({}, {
__index = function(_, key)
if key == "Connect" or key == "ConnectParallel" then
return function() return {Disconnect = function() end} end
end
if key == "Wait" then
return function() error("Omega killed") end
end
return function() end
end
})
end
return function() end
end
local val = RunService[k]
if k == "BindToRenderStep" then
return function(_, name, priority, func)
table.insert(_S.omegaRenderStepNames, name)
return RunService:BindToRenderStep(name, priority, func)
end
end
if k == "UnbindFromRenderStep" then
return function(_, name)
for i, n in ipairs(_S.omegaRenderStepNames) do
if n == name then table.remove(_S.omegaRenderStepNames, i) break end
end
return RunService:UnbindFromRenderStep(name)
end
end
if k == "RenderStepped" or k == "Heartbeat" or k == "Stepped" then
local signal = val
return setmetatable({}, {
__index = function(_, key)
if key == "Connect" then
return function(_, func)
local conn = signal:Connect(func)
table.insert(_S.omegaConnections, conn)
return conn
end
end
if key == "ConnectParallel" then
return function(_, func)
local conn = signal:ConnectParallel(func)
table.insert(_S.omegaConnections, conn)
return conn
end
end
if key == "Wait" then
return function(_, ...) return signal:Wait(...) end
end
return signal[key]
end,
__tostring = function() return tostring(signal) end
})
end
if type(val) == "function" then
return function(_, ...) return val(RunService, ...) end
end
return val
end
})
end
local function createFakeGame()
local fakeGame = setmetatable({}, {
__index = function(t, k)
local val = game[k]
if k == "GetService" then
return function(_, serviceName)
local service = game:GetService(serviceName)
if serviceName == "RunService" then
return createFakeRunService()
end
if serviceName == "UserInputService" then
return setmetatable({}, {
__index = function(_, key)
if _S.omegaKilled then
if key == "InputBegan" or key == "InputEnded" or key == "InputChanged" then
return setmetatable({}, {
__index = function(_, skey)
if skey == "Connect" or skey == "ConnectParallel" then
return function() return {Disconnect = function() end} end
end
return function() end
end
})
end
end
local sval = service[key]
if key == "InputBegan" or key == "InputEnded" or key == "InputChanged" then
return setmetatable({}, {
__index = function(_, skey)
if skey == "Connect" then
return function(_, func)
local conn = sval:Connect(func)
table.insert(_S.omegaConnections, conn)
return conn
end
end
if skey == "ConnectParallel" then
return function(_, func)
local conn = sval:ConnectParallel(func)
table.insert(_S.omegaConnections, conn)
return conn
end
end
if skey == "Wait" then
return function(_, ...) return sval:Wait(...) end
end
return sval[skey]
end,
__tostring = function() return tostring(sval) end
})
end
if type(sval) == "function" then
return function(_, ...) return sval(service, ...) end
end
return sval
end,
__newindex = function(_, key, value)
service[key] = value
end,
__tostring = function() return tostring(service) end
})
end
return service
end
end
if type(val) == "function" then
return function(_, ...) return val(game, ...) end
end
return val
end,
__tostring = function() return tostring(game) end
})
return fakeGame
end
executeOmegaBtn.MouseButton1Click:Connect(function()
if _S.omegaHasExecuted then return end
_S.omegaHasExecuted = true
executeOmegaBtn.Active = false
executeOmegaBtn.Text = "Execution..."
executeOmegaBtn.BackgroundColor3 = Color3.fromRGB(40, 150, 50)
-- Arrêter tout nettoyage précédent (pour permettre l'exécution à l'infini)
_S.omegaCleanupGeneration = _S.omegaCleanupGeneration + 1
if _S.omegaForceResetConn then
pcall(function() _S.omegaForceResetConn:Disconnect() end)
_S.omegaForceResetConn = nil
end
-- Déconnecter les anciennes connexions et débind les anciens RenderStep
for _, conn in ipairs(_S.omegaConnections) do
pcall(function() conn:Disconnect() end)
end
for _, name in ipairs(_S.omegaRenderStepNames) do
pcall(function() RunService:UnbindFromRenderStep(name) end)
end
-- Annuler les anciens threads
for _, thread in ipairs(_S.omegaThreads) do
pcall(function() task.cancel(thread) end)
end
-- Détruire les anciennes instances
for _, inst in ipairs(_S.omegaCreatedInstances) do
pcall(function()
if inst and inst.Parent then inst:Destroy() end
end)
end
local playerGui = player:FindFirstChildOfClass("PlayerGui")
if playerGui then
_S.omegaGuiSnapshot = {}
for _, child in playerGui:GetChildren() do
_S.omegaGuiSnapshot[child] = true
end
end
-- Snapshot CoreGui aussi (le script Omega peut créer des GUIs là)
_S.omegaCoreGuiSnapshot = {}
pcall(function()
local coreGui = game:GetService("CoreGui")
if coreGui then
for _, child in coreGui:GetChildren() do
_S.omegaCoreGuiSnapshot[child] = true
end
end
end)
_S.omegaRenderStepNames = {}
_S.omegaConnections = {}
_S.omegaCreatedInstances = {}
_S.omegaKilled = false
_S.omegaThreads = {}
_S.omegaHiddenStates = {}
local fakeRS = createFakeRunService()
local fakeG = createFakeGame()
local fakeInstance = setmetatable({}, {
__index = function(_, key)
if key == "new" then
return function(className, parent)
if _S.omegaKilled then return nil end
local inst = Instance.new(className, parent)
table.insert(_S.omegaCreatedInstances, inst)
return inst
end
end
return Instance[key]
end,
__tostring = function() return tostring(Instance) end
})
local fakeTask = setmetatable({}, {
__index = function(_, k)
local val = task[k]
if _S.omegaKilled then
if k == "spawn" or k == "delay" or k == "defer" then
return function() end
end
if k == "wait" then
return function() error("Omega killed") end
end
end
if k == "spawn" then
return function(f, ...)
local thread = task.spawn(f, ...)
table.insert(_S.omegaThreads, thread)
return thread
end
end
if k == "delay" then
return function(d, f, ...)
local thread = task.delay(d, f, ...)
table.insert(_S.omegaThreads, thread)
return thread
end
end
if k == "defer" then
return function(f, ...)
local thread = task.defer(f, ...)
table.insert(_S.omegaThreads, thread)
return thread
end
end
if type(val) == "function" then
return function(_, ...) return val(...) end
end
return val
end
})
local fakeCoroutine = setmetatable({}, {
__index = function(_, k)
if _S.omegaKilled then
if k == "create" then
return function() return coroutine.create(function() end) end
end
if k == "wrap" then
return function() return function() end end
end
if k == "resume" then
return function() return false, "killed" end
end
end
local val = coroutine[k]
if k == "create" then
return function(f)
local co = coroutine.create(f)
table.insert(_S.omegaThreads, co)
return co
end
end
if k == "wrap" then
return function(f)
local co = coroutine.create(f)
table.insert(_S.omegaThreads, co)
return function(...)
return coroutine.resume(co, ...)
end
end
end
if type(val) == "function" then
return function(_, ...) return val(...) end
end
return val
end
})
local omegaEnv = setmetatable({}, {
__index = function(t, k)
if k == "RunService" then return fakeRS end
if k == "game" then return fakeG end
if k == "Instance" then return fakeInstance end
if k == "task" then return fakeTask end
if k == "coroutine" then return fakeCoroutine end
if k == "wait" then
if _S.omegaKilled then return function() error("Omega killed") end end
return task.wait
end
if k == "spawn" then
if _S.omegaKilled then return function() end end
return function(f, ...)
local thread = task.spawn(f, ...)
table.insert(_S.omegaThreads, thread)
return thread
end
end
if k == "delay" then
if _S.omegaKilled then return function() end end
return function(d, f, ...)
local thread = task.delay(d, f, ...)
table.insert(_S.omegaThreads, thread)
return thread
end
end
return getfenv()[k]
end
})
local success, result = pcall(function()
local func = loadstring(game:HttpGet("https://rawscripts.net/raw/School-RP-V3-FR-School-rp-fr-omega-219467"))
if func then
setfenv(func, omegaEnv)
return func()
end
end)
if success then
executeOmegaBtn.Text = "Omega executé"
executeOmegaBtn.BackgroundColor3 = Color3.fromRGB(40, 150, 50)
-- Enable Hide button (Omega is visible by default, so Show stays disabled)
hideOmegaBtn.Active = true
hideOmegaBtn.AutoButtonColor = true
hideOmegaBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
showOmegaBtn.Active = false
showOmegaBtn.AutoButtonColor = false
showOmegaBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
killOmegaBtn.Active = true
killOmegaBtn.AutoButtonColor = true
killOmegaBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
else
executeOmegaBtn.Text = "Erreur Omega"
executeOmegaBtn.BackgroundColor3 = _S.customBtnColor or Color3.fromRGB(120, 30, 30)
executeOmegaBtn.Active = true
_S.omegaHasExecuted = false
killOmegaBtn.Active = false
killOmegaBtn.AutoButtonColor = false
killOmegaBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
end
end)
-- CACHER OMEGA
hideOmegaBtn.MouseButton1Click:Connect(function()
if not _S.omegaHasExecuted or _S.omegaKilled then return end
_S.omegaHiddenStates = {}
-- Cacher les instances tracées en sauvegardant leur état original
for _, inst in ipairs(_S.omegaCreatedInstances) do
pcall(function()
if inst and inst.Parent then
if inst:IsA("ScreenGui") then
_S.omegaHiddenStates[inst] = {enabled = inst.Enabled}
inst.Enabled = false
elseif inst:IsA("BasePart") then
_S.omegaHiddenStates[inst] = {transparency = inst.Transparency, canCollide = inst.CanCollide}
inst.Transparency = 1
inst.CanCollide = false
elseif inst:IsA("Decal") or inst:IsA("Texture") then
_S.omegaHiddenStates[inst] = {transparency = inst.Transparency}
inst.Transparency = 1
elseif inst:IsA("Sound") then
_S.omegaHiddenStates[inst] = {volume = inst.Volume}
inst.Volume = 0
elseif inst:IsA("BillboardGui") or inst:IsA("SurfaceGui") then
_S.omegaHiddenStates[inst] = {enabled = inst.Enabled}
inst.Enabled = false
elseif inst:IsA("ParticleEmitter") or inst:IsA("Trail") or inst:IsA("Beam") or inst:IsA("Fire") or inst:IsA("Smoke") or inst:IsA("Sparkles") then
_S.omegaHiddenStates[inst] = {enabled = inst.Enabled}
inst.Enabled = false
end
end
end)
end
-- Cacher aussi les GUIs dans PlayerGui qui n'etaient pas la avant Omega
local playerGui = player:FindFirstChildOfClass("PlayerGui")
if playerGui then
for _, child in playerGui:GetChildren() do
if not _S.omegaGuiSnapshot[child] and child.Name ~= "AdminPanel" then
pcall(function()
if child:IsA("ScreenGui") then
_S.omegaHiddenStates[child] = {enabled = child.Enabled}
child.Enabled = false
elseif child:IsA("Folder") then
for _, desc in child:GetDescendants() do
if desc:IsA("ScreenGui") then
_S.omegaHiddenStates[desc] = {enabled = desc.Enabled}
desc.Enabled = false
elseif desc:IsA("GuiObject") then
_S.omegaHiddenStates[desc] = {visible = desc.Visible}
desc.Visible = false
end
end
end
end)
end
end
end
-- Cacher aussi les GUIs dans CoreGui qui n'etaient pas la avant Omega
local coreGui = game:GetService("CoreGui")
for _, child in coreGui:GetChildren() do
if not _S.omegaCoreGuiSnapshot[child] then
pcall(function()
if child:IsA("ScreenGui") then
_S.omegaHiddenStates[child] = {enabled = child.Enabled}
child.Enabled = false
end
end)
end
end
setHideOmegaToggle(true)
setShowOmegaToggle(false)
-- Disable Hide (already hidden), enable Show
hideOmegaBtn.Active = false
hideOmegaBtn.AutoButtonColor = false
hideOmegaBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
showOmegaBtn.Active = true
showOmegaBtn.AutoButtonColor = true
showOmegaBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
end)
-- AFFICHER OMEGA
showOmegaBtn.MouseButton1Click:Connect(function()
if not _S.omegaHasExecuted or _S.omegaKilled then return end
-- Afficher les instances tracées en restaurant leur état original
for _, inst in ipairs(_S.omegaCreatedInstances) do
pcall(function()
if inst and inst.Parent then
local saved = _S.omegaHiddenStates[inst]
if inst:IsA("ScreenGui") then
inst.Enabled = (saved and saved.enabled ~= nil) and saved.enabled or true
elseif inst:IsA("BasePart") then
inst.Transparency = (saved and saved.transparency ~= nil) and saved.transparency or 0
inst.CanCollide = (saved and saved.canCollide ~= nil) and saved.canCollide or true
elseif inst:IsA("Decal") or inst:IsA("Texture") then
inst.Transparency = (saved and saved.transparency ~= nil) and saved.transparency or 0
elseif inst:IsA("Sound") then
inst.Volume = (saved and saved.volume ~= nil) and saved.volume or 1
elseif inst:IsA("BillboardGui") or inst:IsA("SurfaceGui") then
inst.Enabled = (saved and saved.enabled ~= nil) and saved.enabled or true
elseif inst:IsA("ParticleEmitter") or inst:IsA("Trail") or inst:IsA("Beam") or inst:IsA("Fire") or inst:IsA("Smoke") or inst:IsA("Sparkles") then
inst.Enabled = (saved and saved.enabled ~= nil) and saved.enabled or true
end
end
end)
end
-- Afficher aussi les GUIs dans PlayerGui qui n'etaient pas la avant Omega
local playerGui = player:FindFirstChildOfClass("PlayerGui")
if playerGui then
for _, child in playerGui:GetChildren() do
if not _S.omegaGuiSnapshot[child] and child.Name ~= "AdminPanel" then
pcall(function()
if child:IsA("ScreenGui") then
local saved = _S.omegaHiddenStates[child]
child.Enabled = (saved and saved.enabled ~= nil) and saved.enabled or true
elseif child:IsA("Folder") then
for _, desc in child:GetDescendants() do
local saved = _S.omegaHiddenStates[desc]
if desc:IsA("ScreenGui") then
desc.Enabled = (saved and saved.enabled ~= nil) and saved.enabled or true
elseif desc:IsA("GuiObject") then
desc.Visible = (saved and saved.visible ~= nil) and saved.visible or true
end
end
end
end)
end
end
end
-- Afficher aussi les GUIs dans CoreGui qui n'etaient pas la avant Omega
local coreGui = game:GetService("CoreGui")
for _, child in coreGui:GetChildren() do
if not _S.omegaCoreGuiSnapshot[child] then
pcall(function()
if child:IsA("ScreenGui") then
local saved = _S.omegaHiddenStates[child]
child.Enabled = (saved and saved.enabled ~= nil) and saved.enabled or true
end
end)
end
end
_S.omegaHiddenStates = {}
setShowOmegaToggle(true)
setHideOmegaToggle(false)
-- Disable Show (already shown), enable Hide
showOmegaBtn.Active = false
showOmegaBtn.AutoButtonColor = false
showOmegaBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
hideOmegaBtn.Active = true
hideOmegaBtn.AutoButtonColor = true
hideOmegaBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
end)
-- KILL OMEGA (ne peut etre relancé qu'en quittant et revenant)
killOmegaBtn.MouseButton1Click:Connect(function()
if not _S.omegaHasExecuted or _S.omegaKilled then return end
_S.omegaKilled = true
-- Déconnecter toutes les connexions
for _, conn in ipairs(_S.omegaConnections) do
pcall(function() conn:Disconnect() end)
end
_S.omegaConnections = {}
-- Débind tous les RenderStep
for _, name in ipairs(_S.omegaRenderStepNames) do
pcall(function() RunService:UnbindFromRenderStep(name) end)
end
_S.omegaRenderStepNames = {}
-- Annuler tous les threads
for _, thread in ipairs(_S.omegaThreads) do
pcall(function() task.cancel(thread) end)
end
_S.omegaThreads = {}
-- Détruire toutes les instances créées par Omega
for _, inst in ipairs(_S.omegaCreatedInstances) do
pcall(function()
if inst and inst.Parent then inst:Destroy() end
end)
end
_S.omegaCreatedInstances = {}
-- Réinitialiser les snapshots et états
_S.omegaGuiSnapshot = {}
_S.omegaCoreGuiSnapshot = {}
_S.omegaHiddenStates = {}
-- Le bouton Execute reste désactivé — Omega ne peut etre relancé qu'en quittant et revenant
executeOmegaBtn.Active = false
executeOmegaBtn.AutoButtonColor = false
executeOmegaBtn.Text = "Omega Killed (quittez & revenez)"
executeOmegaBtn.BackgroundColor3 = Color3.fromRGB(40, 150, 50)
executeOmegaBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
-- Désactiver tous les boutons de la Page 2 sauf le bouton Retour
hideOmegaBtn.Active = false
hideOmegaBtn.AutoButtonColor = false
hideOmegaBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
showOmegaBtn.Active = false
showOmegaBtn.AutoButtonColor = false
showOmegaBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
setHideOmegaToggle(false)
setShowOmegaToggle(false)
killOmegaBtn.Active = false
killOmegaBtn.AutoButtonColor = false
killOmegaBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
-- Feedback visuel sur le bouton Kill
killOmegaBtn.BackgroundColor3 = _S.customBtnColor or Color3.fromRGB(120, 30, 30)
killOmegaBtn.Text = "Omega Killed!"
task.wait(1)
killOmegaBtn.Text = "Omega Killed (quittez & revenez)"
killOmegaBtn.BackgroundColor3 = Color3.fromRGB(40, 150, 50)
end)
end
-- === FONCTIONS ===
-- SPECTATE
function startSpectate(targetPlayer)
if not targetPlayer or not targetPlayer.Parent then
return false
end
if _S.spectatingPlayer == targetPlayer then
return false
end
stopSpectate()
_S.spectatingPlayer = targetPlayer
local function onCharAdded(char)
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then
-- CameraType not forced to avoid sync errors with custom camera games
camera.CameraSubject = hum
end
end
if targetPlayer.Character then
onCharAdded(targetPlayer.Character)
end
spectateCharConn = targetPlayer.CharacterAdded:Connect(onCharAdded)
return true
end
function stopSpectate()
_S.spectatingPlayer = nil
if spectateCharConn then
spectateCharConn:Disconnect()
spectateCharConn = nil
end
local char = player.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then
-- CameraType not forced to avoid sync errors with custom camera games
camera.CameraSubject = hum
end
end
end
-- Non-aggressive spectate camera guard: only re-applies CameraSubject when changed by other scripts
local spectateCameraGuardConn
local function refreshSpectateCameraGuard()
if spectateCameraGuardConn then
spectateCameraGuardConn:Disconnect()
spectateCameraGuardConn = nil
end
spectateCameraGuardConn = camera:GetPropertyChangedSignal("CameraSubject"):Connect(function()
if _S.spectatingPlayer and _S.spectatingPlayer.Parent and _S.spectatingPlayer.Character then
local hum = _S.spectatingPlayer.Character:FindFirstChildOfClass("Humanoid")
if hum and camera.CameraSubject ~= hum then
camera.CameraSubject = hum
end
end
end)
end
refreshSpectateCameraGuard()
-- ESP
local function getESPColor(p)
local team = p.Team
if team and team.TeamColor then
return team.TeamColor.Color
end
return Color3.fromRGB(255, 255, 0)
end
local function applyESP(p)
if not p or not p.Character then return end
local char = p.Character
local espColor = getESPColor(p)
local hl = Instance.new("Highlight")
hl.Name = "ESP_HL"
hl.FillColor = espColor
hl.FillTransparency = 0.5
hl.OutlineColor = Color3.fromRGB(255, 255, 255)
hl.OutlineTransparency = 0
hl.Parent = char
local bb = Instance.new("BillboardGui")
bb.Name = "ESP_BB"
bb.Size = UDim2.new(0, 200, 0, 60)
bb.StudsOffset = Vector3.new(0, 4, 0)
bb.AlwaysOnTop = true
bb.Parent = char
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, 0, 0, 20)
lbl.BackgroundTransparency = 1
lbl.Text = p.Name
lbl.TextColor3 = espColor
lbl.Font = Enum.Font.SourceSansBold
lbl.TextSize = 16
lbl.Parent = bb
local roleLbl = Instance.new("TextLabel")
roleLbl.Name = "RoleLabel"
roleLbl.Size = UDim2.new(1, 0, 0, 20)
roleLbl.Position = UDim2.new(0, 0, 0, 20)
roleLbl.BackgroundTransparency = 1
local team = p.Team
if team then
roleLbl.Text = team.Name
local tc = team.TeamColor
if tc then roleLbl.TextColor3 = tc.Color else roleLbl.TextColor3 = espColor end
else
roleLbl.Text = "Aucune équipe"
roleLbl.TextColor3 = Color3.fromRGB(255, 255, 0)
end
roleLbl.Font = Enum.Font.SourceSans
roleLbl.TextSize = 13
roleLbl.Parent = bb
local hpLbl = Instance.new("TextLabel")
hpLbl.Name = "HPLabel"
hpLbl.Size = UDim2.new(1, 0, 0, 20)
hpLbl.Position = UDim2.new(0, 0, 0, 40)
hpLbl.BackgroundTransparency = 1
hpLbl.Text = ""
hpLbl.TextColor3 = Color3.fromRGB(255, 255, 255)
hpLbl.Font = Enum.Font.SourceSansBold
hpLbl.TextSize = 14
hpLbl.Visible = false
hpLbl.Parent = bb
_S.espObjects[p] = {hl = hl, bb = bb}
end
local function removeESP(p)
if _S.espObjects[p] then
if _S.espObjects[p].hl then _S.espObjects[p].hl:Destroy() end
if _S.espObjects[p].bb then _S.espObjects[p].bb:Destroy() end
_S.espObjects[p] = nil
end
end
local function refreshESP()
for _, p in Players:GetPlayers() do
if p ~= player then
if _S.espEnabled then
-- Only apply if not already applied or if character changed
if not _S.espObjects[p] or not _S.espObjects[p].hl or not _S.espObjects[p].hl.Parent then
removeESP(p)
applyESP(p)
else
-- Mettre à jour la couleur si l'équipe a changé
local espColor = getESPColor(p)
if _S.espObjects[p].hl then
_S.espObjects[p].hl.FillColor = espColor
end
if _S.espObjects[p].bb then
local lbl = _S.espObjects[p].bb:FindFirstChildOfClass("TextLabel")
if lbl then
lbl.TextColor3 = espColor
end
local roleLbl = _S.espObjects[p].bb:FindFirstChild("RoleLabel")
if roleLbl then
local team = p.Team
if team then
roleLbl.Text = team.Name
local tc = team.TeamColor
if tc then roleLbl.TextColor3 = tc.Color else roleLbl.TextColor3 = espColor end
else
roleLbl.Text = "Aucune équipe"
roleLbl.TextColor3 = Color3.fromRGB(255, 255, 0)
end
end
end
end
else
removeESP(p)
end
end
end
end
-- VITESSE
applySpeed = function()
local char = player.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then hum.WalkSpeed = _S.speedEnabled and _S.speedValue or 16 end
end
end
-- FLY
local function setupFly()
local char = player.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
local hum = char:FindFirstChildOfClass("Humanoid")
if not hrp or not hum then return end
if _S.flyVelocity then _S.flyVelocity:Destroy() end
if _S.flyGyro then _S.flyGyro:Destroy() end
_S.flyVelocity = Instance.new("BodyVelocity")
_S.flyVelocity.MaxForce = Vector3.new(400000, 400000, 400000)
_S.flyVelocity.Velocity = Vector3.new(0, 0, 0)
_S.flyVelocity.Parent = hrp
_S.flyGyro = Instance.new("BodyGyro")
_S.flyGyro.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
_S.flyGyro.P = 50000
_S.flyGyro.D = 400
_S.flyGyro.CFrame = hrp.CFrame
_S.flyGyro.Parent = hrp
hum.PlatformStand = true
end
local function disableFly()
if _S.flyVelocity then _S.flyVelocity:Destroy() _S.flyVelocity = nil end
if _S.flyGyro then _S.flyGyro:Destroy() _S.flyGyro = nil end
local char = player.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then hum.PlatformStand = false end
end
end
-- === SWIM (Nager dans l'air) ===
local function setupSwim()
local char = player.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
local hum = char:FindFirstChildOfClass("Humanoid")
if not hrp or not hum then return end
if _S.swimVelocity then _S.swimVelocity:Destroy() end
if _S.swimGyro then _S.swimGyro:Destroy() end
_S.swimVelocity = Instance.new("BodyVelocity")
_S.swimVelocity.MaxForce = Vector3.new(400000, 400000, 400000)
_S.swimVelocity.Velocity = Vector3.new(0, 0, 0)
_S.swimVelocity.Parent = hrp
_S.swimGyro = Instance.new("BodyGyro")
_S.swimGyro.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
_S.swimGyro.P = 50000
_S.swimGyro.D = 400
_S.swimGyro.CFrame = hrp.CFrame
_S.swimGyro.Parent = hrp
hum:SetStateEnabled(Enum.HumanoidStateType.Freefall, false)
hum:ChangeState(Enum.HumanoidStateType.Swimming)
end
local function disableSwim()
if _S.swimVelocity then _S.swimVelocity:Destroy() _S.swimVelocity = nil end
if _S.swimGyro then _S.swimGyro:Destroy() _S.swimGyro = nil end
local char = player.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then
hum:SetStateEnabled(Enum.HumanoidStateType.Freefall, true)
end
end
end
-- === LISTE DES JOUEURS ===
local entries = {}
local searchText = ""
-- Refresh sans flicker: met à jour en place, crée/supprime seulement si nécessaire
local function refreshList()
local seen = {}
for _, p in Players:GetPlayers() do
seen[p] = true
local teamName = p.Team and p.Team.Name or "Aucune"
local text = string.format("%s (%s) | ID: %d | %s", p.Name, p.DisplayName, p.UserId, teamName)
if entries[p] then
-- Entrée existe: juste mettre à jour le texte et la couleur
local e = entries[p]
local lbl = e:FindFirstChildOfClass("TextLabel")
if lbl and lbl.Text ~= text then lbl.Text = text end
local newColor = (p == _S.selectedPlayer) and Color3.fromRGB(55, 75, 115) or Color3.fromRGB(30, 30, 45)
if e.BackgroundColor3 ~= newColor then e.BackgroundColor3 = newColor end
else
-- Nouvelle entrée
local e = Instance.new("TextButton")
e.Name = p.Name
e.Size = UDim2.new(1, -6, 0, 26)
e.BackgroundColor3 = (p == _S.selectedPlayer) and Color3.fromRGB(55, 75, 115) or Color3.fromRGB(30, 30, 45)
e.BackgroundTransparency = 0.12
e.Text = ""
e.BorderSizePixel = 0
e.Parent = pScroll
Instance.new("UICorner", e).CornerRadius = UDim.new(0, 4)
-- Avatar du joueur
local avBg = Instance.new("Frame")
avBg.Size = UDim2.new(0, 22, 0, 22)
avBg.Position = UDim2.new(0, 4, 0.5, -11)
avBg.BackgroundColor3 = Color3.fromRGB(40, 40, 55)
avBg.BorderSizePixel = 0
avBg.Parent = e
Instance.new("UICorner", avBg).CornerRadius = UDim.new(1, 0)
local avImg = Instance.new("ImageLabel")
avImg.Size = UDim2.new(1, -2, 1, -2)
avImg.Position = UDim2.new(0, 1, 0, 1)
avImg.BackgroundColor3 = Color3.fromRGB(30, 30, 40)
avImg.BorderSizePixel = 0
avImg.Image = ""
avImg.Parent = avBg
Instance.new("UICorner", avImg).CornerRadius = UDim.new(1, 0)
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, -36, 1, 0)
lbl.Position = UDim2.new(0, 32, 0, 0)
lbl.BackgroundTransparency = 1
lbl.Text = text
lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
lbl.Font = Enum.Font.SourceSans
lbl.TextSize = 14
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.TextTruncate = Enum.TextTruncate.AtEnd
lbl.Parent = e
-- Charger l'avatar du joueur
task.spawn(function()
local success, result = pcall(function()
return Players:GetUserThumbnailAsync(p.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size420x420)
end)
if success and result and avImg and avImg.Parent then
avImg.Image = result
end
end)
e.MouseButton1Click:Connect(function()
clickSound:Play()
_S.selectedPlayer = p
refreshList()
if updateVolLabel then updateVolLabel() end
end)
entries[p] = e
end
end
-- Supprimer seulement les entrées des joueurs partis
for p, e in pairs(entries) do
if not seen[p] then
if e and e.Parent then e:Destroy() end
entries[p] = nil
end
end
-- Filtrer par recherche
local search = string.lower(searchText)
for p, e in pairs(entries) do
local match = search == "" or
string.find(string.lower(p.Name), search, 1, true) or
string.find(string.lower(p.DisplayName), search, 1, true)
e.Visible = match and true or false
end
end
refreshList()
searchBox:GetPropertyChangedSignal("Text"):Connect(function()
searchText = searchBox.Text
refreshList()
end)
Players.PlayerAdded:Connect(refreshList)
Players.PlayerRemoving:Connect(function(p)
if p == _S.selectedPlayer then _S.selectedPlayer = nil end
if p == _S.spectatingPlayer then stopSpectate() end
refreshList()
end)
-- Refresh continu invisible (met à jour les équipes etc. sans recréer)
task.spawn(function()
while task.wait(2) do
refreshList()
end
end)
-- === CONNEXIONS BOUTONS ===
-- ESP
local function setupESPChar(p)
if p == player then return end -- Ne pas mettre l'ESP sur soi-mme
p.CharacterAdded:Connect(function(char)
if _S.espEnabled then
-- Wait for character to be fully loaded
task.wait(0.5)
if p.Character and p.Character.Parent then
removeESP(p)
applyESP(p)
end
end
end)
end
for _, p in Players:GetPlayers() do setupESPChar(p) end
Players.PlayerAdded:Connect(function(p)
setupESPChar(p)
refreshList()
if _S.espEnabled then
-- Wait for the new player's character to spawn
task.spawn(function()
-- Wait for character
local waited = 0
while not p.Character and waited < 10 do
task.wait(0.5)
waited = waited + 0.5
end
if p.Character and _S.espEnabled then
removeESP(p)
applyESP(p)
end
end)
end
end)
Players.PlayerRemoving:Connect(function(p) removeESP(p) end)
-- Continuous ESP monitor: ensures ESP stays active on all players
task.spawn(function()
while task.wait(0.5) do
if _S.espEnabled then
-- Nettoyer l'ESP sur soi-mme si prsent
removeESP(player)
for _, p in Players:GetPlayers() do
if p ~= player then
local needsESP = false
if not _S.espObjects[p] then
needsESP = true
elseif not _S.espObjects[p].hl or not _S.espObjects[p].hl.Parent then
needsESP = true
elseif not _S.espObjects[p].bb or not _S.espObjects[p].bb.Parent then
needsESP = true
end
if needsESP then
if p.Character and p.Character.Parent then
removeESP(p)
applyESP(p)
end
end
end
end
end
end
end)
espBtn.MouseButton1Click:Connect(function()
_S.espEnabled = not _S.espEnabled
setESPToggle(_S.espEnabled)
if _S.espEnabled then
else
end
refreshESP()
end)
-- Vitesse
speedBtn.MouseButton1Click:Connect(function()
_S.speedEnabled = not _S.speedEnabled
setSpeedToggle(_S.speedEnabled)
if _S.speedEnabled then
else
end
applySpeed()
end)
speedDownBtn.MouseButton1Click:Connect(function()
_S.speedValue = math.max(1, _S.speedValue - 10)
speedValueLabel.Text = tostring(_S.speedValue)
walkUpdateSlider(true)
if _S.speedEnabled then
applySpeed()
end
end)
speedUpBtn.MouseButton1Click:Connect(function()
_S.speedValue = _S.speedValue + 10
speedValueLabel.Text = tostring(_S.speedValue)
walkUpdateSlider(true)
if _S.speedEnabled then
applySpeed()
end
end)
-- Fly speed +/- controls
flySpeedDownBtn.MouseButton1Click:Connect(function()
_S.flySpeed = math.max(1, _S.flySpeed - 10)
flySpeedValueLabel.Text = tostring(_S.flySpeed)
end)
flySpeedUpBtn.MouseButton1Click:Connect(function()
_S.flySpeed = _S.flySpeed + 10
flySpeedValueLabel.Text = tostring(_S.flySpeed)
end)
-- Fly
flyBtn.MouseButton1Click:Connect(function()
_S.flyEnabled = not _S.flyEnabled
setFlyToggle(_S.flyEnabled)
if _S.flyEnabled then
setupFly()
else
disableFly()
end
end)
-- Swim (Nager dans l'air)
_S.swimBtn.MouseButton1Click:Connect(function()
_S.swimEnabled = not _S.swimEnabled
_S.setSwimToggle(_S.swimEnabled)
if _S.swimEnabled then
setupSwim()
else
disableSwim()
end
end)
_S.swimSpeedDownBtn.MouseButton1Click:Connect(function()
_S.swimSpeed = math.max(1, _S.swimSpeed - 10)
_S.swimSpeedValueLabel.Text = tostring(_S.swimSpeed)
_S.swimUpdateSlider(true)
end)
_S.swimSpeedUpBtn.MouseButton1Click:Connect(function()
_S.swimSpeed = _S.swimSpeed + 10
_S.swimSpeedValueLabel.Text = tostring(_S.swimSpeed)
_S.swimUpdateSlider(true)
end)
-- Boucle de surveillance: réapplique Walk et Fly en permanence s'ils sont activés
-- Empêche d'autres scripts ou Roblox de réinitialiser la vitesse sans cliquer sur le bouton
task.spawn(function()
while task.wait(0.3) do
local char = player.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
local hrp = char:FindFirstChild("HumanoidRootPart")
-- Réappliquer la Walk Speed si activée et si elle a été changée
if _S.speedEnabled and hum and hum.WalkSpeed ~= _S.speedValue then
hum.WalkSpeed = _S.speedValue
end
-- Réappliquer le Fly si activé et si le BodyVelocity/BodyGyro a été supprimé
if _S.flyEnabled and hrp then
if not _S.flyVelocity or not _S.flyVelocity.Parent then
_S.flyVelocity = Instance.new("BodyVelocity")
_S.flyVelocity.MaxForce = Vector3.new(400000, 400000, 400000)
_S.flyVelocity.Velocity = Vector3.new(0, 0, 0)
_S.flyVelocity.Parent = hrp
end
if not _S.flyGyro or not _S.flyGyro.Parent then
_S.flyGyro = Instance.new("BodyGyro")
_S.flyGyro.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
_S.flyGyro.P = 50000
_S.flyGyro.D = 400
_S.flyGyro.CFrame = hrp.CFrame
_S.flyGyro.Parent = hrp
end
if hum then
hum.PlatformStand = true
end
end
end
end
end)
-- NOCLIP
noclipBtn.MouseButton1Click:Connect(function()
_S.noclipEnabled = not _S.noclipEnabled
setNoclipToggle(_S.noclipEnabled)
if _S.noclipEnabled then
else
-- Restaurer les collisions (sauf HumanoidRootPart)
local char = player.Character
if char then
for _, part in char:GetDescendants() do
if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
part.CanCollide = true
end
end
end
end
end)
task.spawn(function()
while task.wait(0.1) do
if _S.noclipEnabled then
local char = player.Character
if char then
for _, part in char:GetDescendants() do
if part:IsA("BasePart") then
part.CanCollide = false
end
end
end
end
end
end)
-- Swim reapplication loop
task.spawn(function()
while task.wait(0.3) do
local char = player.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
local hrp = char:FindFirstChild("HumanoidRootPart")
if _S.swimEnabled and hrp then
if not _S.swimVelocity or not _S.swimVelocity.Parent then
_S.swimVelocity = Instance.new("BodyVelocity")
_S.swimVelocity.MaxForce = Vector3.new(400000, 400000, 400000)
_S.swimVelocity.Velocity = Vector3.new(0, 0, 0)
_S.swimVelocity.Parent = hrp
end
if not _S.swimGyro or not _S.swimGyro.Parent then
_S.swimGyro = Instance.new("BodyGyro")
_S.swimGyro.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
_S.swimGyro.P = 50000
_S.swimGyro.D = 400
_S.swimGyro.CFrame = hrp.CFrame
_S.swimGyro.Parent = hrp
end
if hum then
hum:SetStateEnabled(Enum.HumanoidStateType.Freefall, false)
hum:ChangeState(Enum.HumanoidStateType.Swimming)
end
end
end
end
end)
-- Swim movement (RenderStepped)
RunService.RenderStepped:Connect(function()
if not _S.swimEnabled or not _S.swimVelocity then return end
local char = player.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
if not hrp then return end
local hum = char:FindFirstChildOfClass("Humanoid")
local cam = Workspace.CurrentCamera
local fwd = cam.CFrame.LookVector
local right = cam.CFrame.RightVector
local up = Vector3.new(0, 1, 0)
local move = Vector3.new(0, 0, 0)
if keys[Enum.KeyCode.W] then move = move + fwd end
if keys[Enum.KeyCode.S] then move = move - fwd end
if keys[Enum.KeyCode.A] then move = move - right end
if keys[Enum.KeyCode.D] then move = move + right end
if keys[Enum.KeyCode.Space] then move = move + up end
if keys[Enum.KeyCode.LeftShift] then move = move - up end
if move.Magnitude > 0 then move = move.Unit * _S.swimSpeed end
_S.swimVelocity.Velocity = move
if hum then
hum:ChangeState(Enum.HumanoidStateType.Swimming)
end
if _S.swimGyro and _S.swimGyro.Parent then
local lookDir = Vector3.new(fwd.X, 0, fwd.Z)
if lookDir.Magnitude > 0.01 then
lookDir = lookDir.Unit
_S.swimGyro.CFrame = CFrame.lookAt(Vector3.new(0, 0, 0), lookDir)
end
end
hrp.AssemblyAngularVelocity = Vector3.new(0, 0, 0)
end)
-- TP JOUEUR
tpPlayerBtn.MouseButton1Click:Connect(function()
if _S.selectedPlayer and _S.selectedPlayer.Character then
local targetHRP = _S.selectedPlayer.Character:FindFirstChild("HumanoidRootPart")
local myChar = player.Character
local myHRP = myChar and myChar:FindFirstChild("HumanoidRootPart")
if targetHRP and myHRP then
myHRP.CFrame = targetHRP.CFrame * CFrame.new(0, 0, 5)
end
end
end)
-- SAVE POSITION
savePosBtn.MouseButton1Click:Connect(function()
local char = player.Character
if char then
local hrp = char:FindFirstChild("HumanoidRootPart")
if hrp then
_S.savedPosition = hrp.CFrame
savePosBtn.BackgroundColor3 = Color3.fromRGB(40, 150, 50)
task.delay(0.3, function()
savePosBtn.BackgroundColor3 = _S.customBtnColor or Color3.fromRGB(120, 30, 30)
end)
end
end
end)
-- SAVE POSITION JOUEUR SELECT
savePlayerPosBtn.MouseButton1Click:Connect(function()
if _S.selectedPlayer and _S.selectedPlayer.Character then
local targetHRP = _S.selectedPlayer.Character:FindFirstChild("HumanoidRootPart")
if targetHRP then
_S.savedPlayerPosition = targetHRP.CFrame
savePlayerPosBtn.BackgroundColor3 = Color3.fromRGB(40, 150, 50)
task.delay(0.3, function()
savePlayerPosBtn.BackgroundColor3 = _S.customBtnColor or Color3.fromRGB(120, 30, 30)
end)
end
else
savePlayerPosBtn.Text = "Aucun joueur"
savePlayerPosBtn.BackgroundColor3 = Color3.fromRGB(150, 50, 50)
task.delay(1.5, function()
savePlayerPosBtn.Text = "Save Pos Joueur Select"
savePlayerPosBtn.BackgroundColor3 = _S.customBtnColor or Color3.fromRGB(120, 30, 30)
end)
end
end)
-- TP POSITION
tpPosBtn.MouseButton1Click:Connect(function()
local targetPos = _S.savedPlayerPosition or _S.savedPosition
if targetPos then
local char = player.Character
if char then
local hrp = char:FindFirstChild("HumanoidRootPart")
if hrp then
hrp.CFrame = targetPos
tpPosBtn.BackgroundColor3 = Color3.fromRGB(40, 150, 50)
task.delay(0.3, function()
tpPosBtn.BackgroundColor3 = _S.customBtnColor or Color3.fromRGB(120, 30, 30)
end)
end
end
else
tpPosBtn.Text = "Aucune save"
tpPosBtn.BackgroundColor3 = Color3.fromRGB(150, 50, 50)
task.delay(1, function()
tpPosBtn.Text = "TP Position"
tpPosBtn.BackgroundColor3 = _S.customBtnColor or Color3.fromRGB(120, 30, 30)
end)
end
end)
-- TP SAVE AUTO (teleporte le joueur a la position sauvegardee par Save Position, en boucle)
tpSavePosBtn.MouseButton1Click:Connect(function()
_S.tpSavePosEnabled = not _S.tpSavePosEnabled
setTpSavePosToggle(_S.tpSavePosEnabled)
if _S.tpSavePosEnabled then
-- Deuxième save: sauvegarder la position actuelle automatiquement
local char = player.Character
if char then
local hrp = char:FindFirstChild("HumanoidRootPart")
if hrp then
_S.tpSaveAutoPosition = hrp.CFrame
end
end
else
_S.tpSaveAutoPosition = nil
end
end)
-- TP SAVE AUTO: alterne entre la position sauvegardée (Save Position / Save Pos Joueur)
-- et la deuxième position (_S.tpSaveAutoPosition = position quand le toggle a été activé)
task.spawn(function()
local toggle = false
while task.wait(0.1) do
if _S.tpSavePosEnabled and _S.tpSaveAutoPosition and (_S.savedPlayerPosition or _S.savedPosition) then
local char = player.Character
if char then
local hrp = char:FindFirstChild("HumanoidRootPart")
local humanoid = char:FindFirstChildOfClass("Humanoid")
-- Teleporter seulement si le joueur est vivant
if hrp and humanoid and humanoid.Health > 0 then
toggle = not toggle
if toggle then
hrp.CFrame = _S.savedPlayerPosition or _S.savedPosition
else
hrp.CFrame = _S.tpSaveAutoPosition
end
end
end
task.wait(_S.tpSaveInterval)
end
end
end)
-- TP SAVE AUTO SIMPLE (teleporte le joueur a la position sauvegardee en boucle, sans alternance)
tpSaveSimpleBtn.MouseButton1Click:Connect(function()
_S.tpSaveSimpleEnabled = not _S.tpSaveSimpleEnabled
setTpSaveSimpleToggle(_S.tpSaveSimpleEnabled)
if _S.tpSaveSimpleEnabled then
else
end
end)
task.spawn(function()
while task.wait(0.1) do
if _S.tpSaveSimpleEnabled and (_S.savedPlayerPosition or _S.savedPosition) then
local char = player.Character
if char then
local hrp = char:FindFirstChild("HumanoidRootPart")
local humanoid = char:FindFirstChildOfClass("Humanoid")
if hrp and humanoid and humanoid.Health > 0 then
hrp.CFrame = _S.savedPlayerPosition or _S.savedPosition
end
end
task.wait(_S.tpSaveInterval)
end
end
end)
-- Interval controls
local function updateIntervalLabel()
intervalValueLabel.Text = tostring(_S.tpSaveInterval)
intervalUpdateSlider(true)
end
intervalDownBtn.MouseButton1Click:Connect(function()
_S.tpSaveInterval = math.max(0.1, _S.tpSaveInterval - 0.5)
updateIntervalLabel()
end)
intervalUpBtn.MouseButton1Click:Connect(function()
_S.tpSaveInterval = _S.tpSaveInterval + 0.5
updateIntervalLabel()
end)
-- TP ALL (téléporte à chaque joueur pendant 1 seconde en cycle)
tpAllBtn.MouseButton1Click:Connect(function()
if _S.tpAllActive then
-- Arrêter le cycle
_S.tpAllActive = false
return
end
-- Vérifier s'il y a d'autres joueurs
local playersList = {}
for _, p in Players:GetPlayers() do
if p ~= player then
table.insert(playersList, p)
end
end
if #playersList == 0 then
-- Aucun autre joueur - feedback visuel
tpAllBtn.Text = "Aucun joueur"
tpAllBtn.BackgroundColor3 = Color3.fromRGB(150, 50, 50)
task.delay(1.5, function()
tpAllBtn.Text = "TP All"
end)
return
end
_S.tpAllActive = true
tpAllBtn.Text = "Arrêter"
setTpAllToggle(true)
task.spawn(function()
while _S.tpAllActive do
playersList = {}
for _, p in Players:GetPlayers() do
if p ~= player then
table.insert(playersList, p)
end
end
if #playersList == 0 then break end
for _, targetP in ipairs(playersList) do
if not _S.tpAllActive then break end
if targetP.Character and targetP.Character:FindFirstChild("HumanoidRootPart") then
local targetHRP = targetP.Character.HumanoidRootPart
local myChar = player.Character
local myHRP = myChar and myChar:FindFirstChild("HumanoidRootPart")
if myHRP then
myHRP.CFrame = targetHRP.CFrame * CFrame.new(0, 0, 5)
end
end
-- Attendre 1 seconde, vérifier l'arrêt toutes les 0.1s
local waited = 0
while waited < 1 and _S.tpAllActive do
task.wait(0.1)
waited = waited + 0.1
end
end
end
-- Réinitialiser le bouton en TP All
_S.tpAllActive = false
tpAllBtn.Text = "TP All"
setTpAllToggle(false)
end)
end)
-- XRAY (voir à travers les murs) - optimisé pour éviter les bugs avec beaucoup de builds
do
local xrayConn = nil
local xrayRemovingConn = nil
local function isCharacterPart(part)
local ancestor = part.Parent
while ancestor and ancestor ~= workspace do
if ancestor:FindFirstChildOfClass("Humanoid") then return true end
ancestor = ancestor.Parent
end
return false
end
local function applyXrayToPart(part)
if not part:IsA("BasePart") then return end
if part.Transparency >= 0.5 then return end
if isCharacterPart(part) then return end
_S.xraySavedTransparency[part] = part.Transparency
part.Transparency = 0.7
end
xrayBtn.MouseButton1Click:Connect(function()
_S.xrayEnabled = not _S.xrayEnabled
setXrayToggle(_S.xrayEnabled)
if _S.xrayEnabled then
xrayBtn.Text = "Enlever Xray"
-- Collecter les parts des personnages joueurs à ne pas rendre transparentes
local charParts = {}
for _, p in Players:GetPlayers() do
if p.Character then
for _, part in p.Character:GetDescendants() do
if part:IsA("BasePart") then
charParts[part] = true
end
end
end
end
-- Appliquer Xray en LOTS (chunked) pour éviter de freezer le jeu avec beaucoup de builds
task.spawn(function()
local count = 0
for _, desc in workspace:GetDescendants() do
if desc:IsA("BasePart") and desc.Transparency < 0.5 and not charParts[desc] then
_S.xraySavedTransparency[desc] = desc.Transparency
desc.Transparency = 0.7
end
count = count + 1
if count >= 500 then
count = 0
task.wait() -- Laisser le jeu respirer entre les lots
end
end
end)
-- Gérer les nouvelles parts via événement (pas de polling)
xrayConn = workspace.DescendantAdded:Connect(function(desc)
if not _S.xrayEnabled then return end
applyXrayToPart(desc)
end)
-- Nettoyer la table quand des parts sont supprimées (évite fuite mémoire)
xrayRemovingConn = workspace.DescendantRemoving:Connect(function(desc)
_S.xraySavedTransparency[desc] = nil
end)
else
xrayBtn.Text = "Xray"
-- Déconnecter les handlers
if xrayConn then
xrayConn:Disconnect()
xrayConn = nil
end
if xrayRemovingConn then
xrayRemovingConn:Disconnect()
xrayRemovingConn = nil
end
-- Restaurer la transparence en lots aussi (évite de freezer à la désactivation)
task.spawn(function()
local count = 0
for part, transp in pairs(_S.xraySavedTransparency) do
if part.Parent then
pcall(function() part.Transparency = transp end)
end
count = count + 1
if count >= 500 then
count = 0
task.wait()
end
end
_S.xraySavedTransparency = {}
end)
end
end)
end
-- VOIR DANS LE NOIR (Night Vision)
nightVisionBtn.MouseButton1Click:Connect(function()
_S.nightVisionEnabled = not _S.nightVisionEnabled
setNightVisionToggle(_S.nightVisionEnabled)
if _S.nightVisionEnabled then
nightVisionBtn.Text = "Ne plus voir dans le noir"
-- Sauvegarder les valeurs d'éclairage d'origine
local lighting = game:GetService("Lighting")
_S.nightVisionSavedLighting.Brightness = lighting.Brightness
_S.nightVisionSavedLighting.Ambient = lighting.Ambient
_S.nightVisionSavedLighting.OutdoorAmbient = lighting.OutdoorAmbient
_S.nightVisionSavedLighting.ExposureCompensation = lighting.ExposureCompensation
-- Appliquer la vision nocturne
lighting.Brightness = 3
lighting.Ambient = Color3.fromRGB(128, 128, 128)
lighting.OutdoorAmbient = Color3.fromRGB(128, 128, 128)
lighting.ExposureCompensation = 2
else
nightVisionBtn.Text = "Voir dans le noir"
-- Restaurer les valeurs d'éclairage d'origine
local lighting = game:GetService("Lighting")
lighting.Brightness = _S.nightVisionSavedLighting.Brightness or 2
lighting.Ambient = _S.nightVisionSavedLighting.Ambient or Color3.fromRGB(0, 0, 0)
lighting.OutdoorAmbient = _S.nightVisionSavedLighting.OutdoorAmbient or Color3.fromRGB(128, 128, 128)
lighting.ExposureCompensation = _S.nightVisionSavedLighting.ExposureCompensation or 0
_S.nightVisionSavedLighting = {}
end
end)
-- Spin toggle click handler
spinBtn.MouseButton1Click:Connect(function()
_S.spinEnabled = not _S.spinEnabled
setSpinToggle(_S.spinEnabled)
end)
-- Spin RenderStepped: rotate character each frame
RunService.RenderStepped:Connect(function(dt)
if not _S.spinEnabled then return end
local char = player.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
if not hrp then return end
hrp.CFrame = hrp.CFrame * CFrame.Angles(0, math.rad(_S.spinSpeed) * dt, 0)
end)
-- AFK ANTI-KICK
local function formatAfkTime(seconds)
local h = math.floor(seconds / 3600)
local m = math.floor((seconds % 3600) / 60)
local s = math.floor(seconds % 60)
return string.format("AFK: %02d:%02d:%02d", h, m, s)
end
afkBtn.MouseButton1Click:Connect(function()
_S.afkEnabled = not _S.afkEnabled
setAfkToggle(_S.afkEnabled)
if _S.afkEnabled then
_S.afkStartTime = os.time()
if _S.afkTimerLabel then
_S.afkTimerLabel.Text = formatAfkTime(0)
end
if _S.afkTimerGui and _S.afkTimerGui:FindFirstChild("Frame") then
_S.afkTimerGui.Frame.Visible = true
end
else
if _S.afkTimerGui and _S.afkTimerGui:FindFirstChild("Frame") then
_S.afkTimerGui.Frame.Visible = false
end
end
end)
task.spawn(function()
while task.wait(1) do
if _S.afkEnabled and _S.afkTimerLabel then
_S.afkTimerLabel.Text = formatAfkTime(os.time() - _S.afkStartTime)
end
end
end)
-- === SPECTATE BUTTONS LOGIC ===
local function getSortedPlayers()
local list = {}
for _, p in ipairs(Players:GetPlayers()) do
if p ~= player then
table.insert(list, p)
end
end
return list
end
local function spectateNextPlayer()
local list = getSortedPlayers()
if #list == 0 then return end
local currentIdx = 0
for i, p in ipairs(list) do
if p == _S.spectatingPlayer then
currentIdx = i
break
end
end
local nextIdx = currentIdx + 1
if nextIdx > #list then nextIdx = 1 end
startSpectate(list[nextIdx])
_S.selectedPlayer = list[nextIdx]
refreshList()
if updateVolLabel then updateVolLabel() end
end
local function spectatePrevPlayer()
local list = getSortedPlayers()
if #list == 0 then return end
local currentIdx = 0
for i, p in ipairs(list) do
if p == _S.spectatingPlayer then
currentIdx = i
break
end
end
local prevIdx = currentIdx - 1
if prevIdx < 1 then prevIdx = #list end
startSpectate(list[prevIdx])
_S.selectedPlayer = list[prevIdx]
refreshList()
if updateVolLabel then updateVolLabel() end
end
spectateBtn.MouseButton1Click:Connect(function()
clickSound:Play()
if _S.selectedPlayer and _S.selectedPlayer.Parent then
startSpectate(_S.selectedPlayer)
else
local list = getSortedPlayers()
if #list > 0 then
startSpectate(list[1])
_S.selectedPlayer = list[1]
refreshList()
if updateVolLabel then updateVolLabel() end
end
end
end)
stopSpectateBtn.MouseButton1Click:Connect(function()
clickSound:Play()
stopSpectate()
end)
prevSpectateBtn.MouseButton1Click:Connect(function()
clickSound:Play()
spectatePrevPlayer()
end)
nextSpectateBtn.MouseButton1Click:Connect(function()
clickSound:Play()
spectateNextPlayer()
end)
task.spawn(function()
while task.wait(120) do
if _S.afkEnabled then
VirtualUser:CaptureController()
VirtualUser:ClickButton1(Vector2.new())
end
end
end)
RunService:BindToRenderStep("REDTIGERMouse", 999999, function()
-- Ne forcer la souris en mode Default que quand le panel est visible
-- Quand le panel est ferm, on laisse Roblox grer normalement (Shift Lock, etc.)
if panel.Visible then
if _S.rightMouseHeld then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseIconEnabled = false
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
UserInputService.MouseIconEnabled = true
end
end
end)
-- Backup 1: RenderStepped connection (runs after most BindToRenderStep calls)
RunService.RenderStepped:Connect(function()
if panel.Visible then
if _S.rightMouseHeld then
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
UserInputService.MouseIconEnabled = false
else
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
UserInputService.MouseIconEnabled = true
end
end
end)
-- Backup 2: Property change signal (detect and override any lock attempt)
UserInputService:GetPropertyChangedSignal("MouseBehavior"):Connect(function()
if panel.Visible and not _S.rightMouseHeld and UserInputService.MouseBehavior ~= Enum.MouseBehavior.Default then
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
end
end)
RunService.RenderStepped:Connect(function()
-- Spectate camera management moved to GetPropertyChangedSignal (avoids sync errors)
if not _S.flyEnabled or not _S.flyVelocity then return end
local char = player.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
if not hrp then return end
local cam = Workspace.CurrentCamera
local fwd = cam.CFrame.LookVector
local right = cam.CFrame.RightVector
local up = Vector3.new(0, 1, 0)
local move = Vector3.new(0, 0, 0)
if keys[Enum.KeyCode.W] then move = move + fwd end
if keys[Enum.KeyCode.S] then move = move - fwd end
if keys[Enum.KeyCode.A] then move = move - right end
if keys[Enum.KeyCode.D] then move = move + right end
if keys[Enum.KeyCode.Space] then move = move + up end
if keys[Enum.KeyCode.LeftShift] then move = move - up end
if move.Magnitude > 0 then move = move.Unit * _S.flySpeed end
_S.flyVelocity.Velocity = move
-- Garder le personnage droit avec le BodyGyro (empeche de tournoyer contre les murs)
if _S.flyGyro and _S.flyGyro.Parent then
local lookDir = Vector3.new(fwd.X, 0, fwd.Z)
if lookDir.Magnitude > 0.01 then
lookDir = lookDir.Unit
_S.flyGyro.CFrame = CFrame.lookAt(Vector3.new(0, 0, 0), lookDir)
end
end
hrp.AssemblyAngularVelocity = Vector3.new(0, 0, 0)
end)
UserInputService.InputBegan:Connect(function(input, gp)
if gp then return end
keys[input.KeyCode] = true
end)
UserInputService.InputEnded:Connect(function(input)
keys[input.KeyCode] = nil
end)
-- AUTO REJOIN
local TeleportService = game:GetService("TeleportService")
autoRejoinBtn.MouseButton1Click:Connect(function()
autoRejoinBtn.Text = "Rejoin..."
autoRejoinBtn.BackgroundColor3 = Color3.fromRGB(40, 150, 50)
local jobId = game.JobId
local placeId = game.PlaceId
if jobId ~= "" then
TeleportService:TeleportToPlaceInstance(placeId, jobId, player)
else
TeleportService:Teleport(placeId, player)
end
end)
-- LOCK JOUEUR (verrouille la camera sur la tete du joueur le plus proche)
lockAllBtn.MouseButton1Click:Connect(function()
_S.lockAllEnabled = not _S.lockAllEnabled
setLockAllToggle(_S.lockAllEnabled)
if _S.lockAllEnabled then
_S.lockSelectedEnabled = false
setLockSelToggle(false)
_S.lockEnemyEnabled = false
setLockEnemyToggle(false)
else
end
end)
-- LOCK SELECT (verrouille la camera sur le joueur selectionne)
lockSelBtn.MouseButton1Click:Connect(function()
_S.lockSelectedEnabled = not _S.lockSelectedEnabled
setLockSelToggle(_S.lockSelectedEnabled)
if _S.lockSelectedEnabled then
_S.lockAllEnabled = false
setLockAllToggle(false)
_S.lockEnemyEnabled = false
setLockEnemyToggle(false)
else
end
end)
-- LOCK EQUIPE ADVERSE (verrouille la camera sur le joueur ennemi le plus proche)
lockEnemyBtn.MouseButton1Click:Connect(function()
_S.lockEnemyEnabled = not _S.lockEnemyEnabled
setLockEnemyToggle(_S.lockEnemyEnabled)
if _S.lockEnemyEnabled then
_S.lockAllEnabled = false
setLockAllToggle(false)
_S.lockSelectedEnabled = false
setLockSelToggle(false)
else
end
end)
-- LOGIQUE LOCK AIM (RenderStep apres la camera Roblox)
do
local function isAlive(p)
if not p or not p.Parent then return false end
local char = p.Character
if not char then return false end
local hum = char:FindFirstChildOfClass("Humanoid")
return hum ~= nil
end
-- Le highlight de lock a été supprimé: on garde uniquement l'ESP + HP
-- Indicateur HP pour le joueur verrouille (affiche les PV sur l'ESP)
local lockHPBillboard = nil
local lastLockedChar = nil
local function hideAllHPLabels()
for _, p in Players:GetPlayers() do
if _S.espObjects[p] and _S.espObjects[p].bb then
local hpLbl = _S.espObjects[p].bb:FindFirstChild("HPLabel")
if hpLbl then hpLbl.Visible = false end
end
end
end
local function removeLockHPIndicator()
hideAllHPLabels()
if lockHPBillboard then
pcall(function() lockHPBillboard:Destroy() end)
lockHPBillboard = nil
end
lastLockedChar = nil
end
local function updateLockHPIndicator(char)
if not char then removeLockHPIndicator() return end
-- Si la cible a change, cacher les anciens labels
if lastLockedChar ~= char then
hideAllHPLabels()
if lockHPBillboard then
pcall(function() lockHPBillboard:Destroy() end)
lockHPBillboard = nil
end
lastLockedChar = char
end
local targetPlayer = nil
for _, p in Players:GetPlayers() do
if p.Character == char then
targetPlayer = p
break
end
end
local hum = char:FindFirstChildOfClass("Humanoid")
if not hum then return end
local hpText = "\u{2764} " .. math.floor(hum.Health) .. "/" .. tostring(hum.MaxHealth)
local hpPct = hum.Health / hum.MaxHealth
local hpColor
if hpPct > 0.5 then
hpColor = Color3.fromRGB(0, 255, 0)
elseif hpPct > 0.25 then
hpColor = Color3.fromRGB(255, 255, 0)
else
hpColor = Color3.fromRGB(255, 0, 0)
end
-- Utiliser l'ESP BillboardGui existant si disponible
if targetPlayer and _S.espObjects[targetPlayer] and _S.espObjects[targetPlayer].bb and _S.espObjects[targetPlayer].bb.Parent then
local bb = _S.espObjects[targetPlayer].bb
local hpLbl = bb:FindFirstChild("HPLabel")
if hpLbl then
hpLbl.Visible = true
hpLbl.Text = hpText
hpLbl.TextColor3 = hpColor
end
if lockHPBillboard then
pcall(function() lockHPBillboard:Destroy() end)
lockHPBillboard = nil
end
else
-- ESP inactif: creer un BillboardGui dedie pour les HP
if not lockHPBillboard or not lockHPBillboard.Parent or lockHPBillboard.Parent ~= char then
if lockHPBillboard then
pcall(function() lockHPBillboard:Destroy() end)
end
lockHPBillboard = Instance.new("BillboardGui")
lockHPBillboard.Name = "LockHP"
lockHPBillboard.Size = UDim2.new(0, 200, 0, 20)
lockHPBillboard.StudsOffset = Vector3.new(0, 4, 0)
lockHPBillboard.AlwaysOnTop = true
lockHPBillboard.Parent = char
local hpLbl = Instance.new("TextLabel")
hpLbl.Size = UDim2.new(1, 0, 1, 0)
hpLbl.BackgroundTransparency = 1
hpLbl.Text = ""
hpLbl.Font = Enum.Font.SourceSansBold
hpLbl.TextSize = 16
hpLbl.Parent = lockHPBillboard
end
local hpLbl = lockHPBillboard:FindFirstChildOfClass("TextLabel")
if hpLbl then
hpLbl.Text = hpText
hpLbl.TextColor3 = hpColor
end
end
end
RunService:BindToRenderStep("LockAim", Enum.RenderPriority.Camera.Value + 1, function()
-- LOCK AIM: verrouille la camera sur la tete d'un joueur
if (_S.lockAllEnabled or _S.lockSelectedEnabled or _S.lockEnemyEnabled) then
local char = player.Character
if char then
local hrp = char:FindFirstChild("HumanoidRootPart")
if hrp then
local targetHead = nil
local curRange
if _S.lockSelectedEnabled then
curRange = _S.lockRanges.sel
elseif _S.lockAllEnabled then
curRange = _S.lockRanges.all
else
curRange = _S.lockRanges.enemy
end
-- Auto-lock par dégâts: si on a pris des dégâts récemment, cibler l'attaquant
if _S.damageAutoLockTarget and tick() < _S.damageAutoLockExpire then
if isAlive(_S.damageAutoLockTarget) then
local head = _S.damageAutoLockTarget.Character:FindFirstChild("Head")
if head and head.Parent then
local dist = (head.Position - hrp.Position).Magnitude
if curRange == math.huge or dist <= curRange then
targetHead = head
end
end
end
end
-- Auto-lock de proximité: si un joueur est très proche, le cibler directement
if not targetHead then
local proxNearest = _S.lockProximityRange
for _, p in Players:GetPlayers() do
if p ~= player and isAlive(p) then
if _S.lockEnemyEnabled and p.Team == player.Team then
continue
end
local head = p.Character:FindFirstChild("Head")
if head and head.Parent then
local dist = (head.Position - hrp.Position).Magnitude
if dist < proxNearest then
proxNearest = dist
targetHead = head
end
end
end
end
end
if not targetHead then
if _S.lockSelectedEnabled then
-- Lock Select: on verrouille uniquement le joueur selectionne s'il est vivant et dans la range
if _S.selectedPlayer and isAlive(_S.selectedPlayer) then
local head = _S.selectedPlayer.Character:FindFirstChild("Head")
if head and head.Parent then
local dist = (head.Position - hrp.Position).Magnitude
if curRange == math.huge or dist <= curRange then
targetHead = head
end
end
end
elseif _S.lockAllEnabled then
local nearestDist = math.huge
for _, p in Players:GetPlayers() do
if p ~= player and isAlive(p) then
local head = p.Character:FindFirstChild("Head")
if head and head.Parent then
local dist = (head.Position - hrp.Position).Magnitude
if dist < nearestDist and (curRange == math.huge or dist <= curRange) then
nearestDist = dist
targetHead = head
end
end
end
end
elseif _S.lockEnemyEnabled then
local myTeam = player.Team
local nearestDist = math.huge
for _, p in Players:GetPlayers() do
if p ~= player and p.Team ~= myTeam and isAlive(p) then
local head = p.Character:FindFirstChild("Head")
if head and head.Parent then
local dist = (head.Position - hrp.Position).Magnitude
if dist < nearestDist and (curRange == math.huge or dist <= curRange) then
nearestDist = dist
targetHead = head
end
end
end
end
end
end
if targetHead then
local camPos = camera.CFrame.Position
camera.CFrame = CFrame.lookAt(camPos, targetHead.Position)
-- Mettre a jour l'indicateur HP sur la cible verrouillee (affiche les PV sur l'ESP)
updateLockHPIndicator(targetHead.Parent)
else
removeLockHPIndicator()
end
end
end
else
removeLockHPIndicator()
end
end)
end
-- Détection de dégâts: auto-lock quand on se fait tirer dessus
task.spawn(function()
local lastHealth = nil
while task.wait(0.1) do
local char = player.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then
if lastHealth and hum.Health < lastHealth - 5 then
-- On a pris des dégâts: trouver l'attaquant le plus proche
local hrp = char:FindFirstChild("HumanoidRootPart")
if hrp then
local nearestDist = math.huge
local nearestPlayer = nil
for _, p in Players:GetPlayers() do
if p ~= player and p.Character then
local pHum = p.Character:FindFirstChildOfClass("Humanoid")
if pHum then
local pHead = p.Character:FindFirstChild("Head")
if pHead then
local dist = (pHead.Position - hrp.Position).Magnitude
if dist < nearestDist then
nearestDist = dist
nearestPlayer = p
end
end
end
end
end
if nearestPlayer then
_S.damageAutoLockTarget = nearestPlayer
_S.damageAutoLockExpire = tick() + 5 -- Lock pendant 5 secondes
end
end
end
lastHealth = hum.Health
else
lastHealth = nil
end
else
lastHealth = nil
end
end
end)
-- JUMP INFINI
jumpInfiniteBtn.MouseButton1Click:Connect(function()
_S.infiniteJumpEnabled = not _S.infiniteJumpEnabled
setJumpInfiniteToggle(_S.infiniteJumpEnabled)
if _S.infiniteJumpEnabled then
else
end
end)
UserInputService.JumpRequest:Connect(function()
if _S.infiniteJumpEnabled then
local char = player.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then
hum:ChangeState(Enum.HumanoidStateType.Jumping)
end
end
end
end)
-- VOICE CHAT VOLUME
do
local voiceVolume = 1.0
local function applyVoiceVolume(targetPlayer)
if not targetPlayer or not targetPlayer.Parent then return end
local adi = targetPlayer:FindFirstChildOfClass("AudioDeviceInput")
if adi then
pcall(function() adi.Volume = voiceVolume end)
end
if targetPlayer.Character then
for _, d in targetPlayer.Character:GetDescendants() do
if d:IsA("AudioEmitter") then
pcall(function()
d:SetDistanceAttenuation({[0] = voiceVolume, [10000] = voiceVolume})
end)
end
end
end
end
function updateVolLabel()
volLabel.Text = "Vol: " .. math.floor(voiceVolume * 100) .. "%"
end
volDownBtn.MouseButton1Click:Connect(function()
voiceVolume = math.max(0, voiceVolume - 0.1)
updateVolLabel()
if _S.selectedPlayer then
applyVoiceVolume(_S.selectedPlayer)
end
end)
volUpBtn.MouseButton1Click:Connect(function()
voiceVolume = math.min(10, voiceVolume + 0.1)
updateVolLabel()
if _S.selectedPlayer then
applyVoiceVolume(_S.selectedPlayer)
end
end)
volLabel.FocusLost:Connect(function()
local text = volLabel.Text
local num = tonumber(text)
if not num then
local pct = string.match(text, "%d+")
num = pct and tonumber(pct)
end
if num then
voiceVolume = math.clamp(num / 100, 0, 10)
updateVolLabel()
if _S.selectedPlayer then
applyVoiceVolume(_S.selectedPlayer)
end
else
updateVolLabel()
end
end)
task.spawn(function()
while task.wait(1) do
if voiceVolume ~= 1.0 and _S.selectedPlayer then
applyVoiceVolume(_S.selectedPlayer)
end
end
end)
end
-- GIVE ALL TOOLS (cherche dans ReplicatedStorage + Workspace ctclient)
giveToolsBtn.MouseButton1Click:Connect(function()
local backpack = player:FindFirstChildOfClass("Backpack")
if not backpack then return end
local seen = {}
local function search(container)
for _, d in container:GetDescendants() do
if d:IsA("Tool") and not seen[d] then
seen[d] = true
pcall(function()
d:Clone().Parent = backpack
end)
end
end
end
pcall(search, ReplicatedStorage)
pcall(search, Workspace)
end)
-- RESPAWN
respawnBtn.MouseButton1Click:Connect(function()
local char = player.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum and hum.Health > 0 then
hum.Health = 0
end
end
end)
-- TOOL TÉLÉPORTATION
tpToolBtn.MouseButton1Click:Connect(function()
local backpack = player:FindFirstChildOfClass("Backpack")
if not backpack then return end
for _, c in backpack:GetChildren() do
if c.Name == "TeleportTool" then c:Destroy() end
end
if player.Character then
for _, c in player.Character:GetChildren() do
if c.Name == "TeleportTool" then c:Destroy() end
end
end
local tool = Instance.new("Tool")
tool.Name = "TeleportTool"
tool.RequiresHandle = false
tool.ToolTip = "Cliquez pour téléporter"
tool.Parent = backpack
end)
task.spawn(function()
while task.wait(0.3) do
_S.teleportToolEquipped = false
local char = player.Character
if char then
for _, c in char:GetChildren() do
if c:IsA("Tool") and c.Name == "TeleportTool" then
_S.teleportToolEquipped = true
break
end
end
end
end
end)
mouse.Button1Down:Connect(function()
if _S.teleportToolEquipped and mouse.Hit then
local char = player.Character
if char then
local hrp = char:FindFirstChild("HumanoidRootPart")
if hrp then
hrp.CFrame = CFrame.new(mouse.Hit.Position + Vector3.new(0, 3, 0))
end
end
end
end)
-- VOIR MON SAC (items cliquables pour équiper / déséquiper)
local bagVisible = false
local profileVisible = false
do
bagBtn.MouseButton1Click:Connect(function()
bagVisible = not bagVisible
bagFrame.Visible = bagVisible
if profileFrame.Visible then profileFrame.Visible = false profileVisible = false end
end)
-- Sac: refresh sans flicker (met à jour en place)
local bagButtons = {} -- tool -> TextButton
task.spawn(function()
while task.wait(0.5) do
if bagVisible then
local currentTools = {}
-- Collecter les tools actuels
local backpack = player:FindFirstChildOfClass("Backpack")
if backpack then
for _, item in backpack:GetChildren() do
if item:IsA("Tool") then
currentTools[item] = false -- non équipé
end
end
end
local char = player.Character
if char then
for _, item in char:GetChildren() do
if item:IsA("Tool") then
currentTools[item] = true -- équipé
end
end
end
-- Supprimer les boutons des tools qui n'existent plus
for tool, button in pairs(bagButtons) do
if not currentTools[tool] or not tool.Parent then
if button and button.Parent then button:Destroy() end
bagButtons[tool] = nil
end
end
-- Créer ou mettre à jour les boutons
for tool, isEquipped in pairs(currentTools) do
if not bagButtons[tool] then
-- Créer nouveau bouton
local item = Instance.new("TextButton")
item.Size = UDim2.new(1, -8, 0, 22)
item.BackgroundTransparency = 0.2
item.Font = Enum.Font.SourceSans
item.TextSize = 14
item.TextXAlignment = Enum.TextXAlignment.Left
item.TextTruncate = Enum.TextTruncate.AtEnd
item.BorderSizePixel = 0
item.Parent = bagFrame
Instance.new("UICorner", item).CornerRadius = UDim.new(0, 3)
item.MouseButton1Click:Connect(function()
clickSound:Play()
local c = player.Character
if c then
local hum = c:FindFirstChildOfClass("Humanoid")
if hum then
if tool.Parent == c then
hum:UnequipTools()
else
local bp = player:FindFirstChildOfClass("Backpack")
if bp and tool.Parent == bp then
hum:EquipTool(tool)
end
end
end
end
end)
bagButtons[tool] = item
end
-- Mettre à jour le texte et la couleur en place
local button = bagButtons[tool]
local newText = " " .. tool.Name .. (isEquipped and " (main)" or "")
local newColor = isEquipped and Color3.fromRGB(40, 150, 50) or (_S.customBtnColor or Color3.fromRGB(120, 30, 30))
local newTextColor = isEquipped and Color3.fromRGB(255, 255, 255) or Color3.fromRGB(255, 255, 255)
if button.Text ~= newText then button.Text = newText end
if button.BackgroundColor3 ~= newColor then button.BackgroundColor3 = newColor end
if button.TextColor3 ~= newTextColor then button.TextColor3 = newTextColor end
end
end
end
end)
end
-- PROFIL JOUEUR (refresh en temps réel sans flicker)
do
local profileLabels = {}
local profileBuilt = false
local function buildProfileLabels()
if profileBuilt then return end
profileBuilt = true
local fields = {"Pseudo", "Affichage", "ID", "Équipe", "Âge", "Vie", "Vitesse", "Position", "Tools", "Perso"}
for _, field in ipairs(fields) do
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, -8, 0, 20)
lbl.BackgroundTransparency = 0.3
lbl.BackgroundColor3 = Color3.fromRGB(25, 25, 40)
lbl.Text = ""
lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
lbl.Font = Enum.Font.SourceSans
lbl.TextSize = 14
lbl.TextXAlignment = Enum.TextXAlignment.Left
lbl.TextTruncate = Enum.TextTruncate.AtEnd
lbl.BorderSizePixel = 0
lbl.Parent = profileFrame
Instance.new("UICorner", lbl).CornerRadius = UDim.new(0, 3)
profileLabels[field] = lbl
end
end
profileBtn.MouseButton1Click:Connect(function()
profileVisible = not profileVisible
profileFrame.Visible = profileVisible
if bagFrame.Visible then bagFrame.Visible = false bagVisible = false end
if profileVisible then
buildProfileLabels()
end
end)
-- Mise à jour profil en temps réel (invisible)
task.spawn(function()
while task.wait(0.5) do
if profileVisible then
local target = _S.selectedPlayer or player
if not target or not target.Parent then
for _, lbl in pairs(profileLabels) do lbl.Text = "" end
else
profileLabels["Pseudo"].Text = " Pseudo: " .. target.Name
profileLabels["Affichage"].Text = " Affichage: " .. target.DisplayName
profileLabels["ID"].Text = " ID: " .. tostring(target.UserId)
profileLabels["Équipe"].Text = " Équipe: " .. (target.Team and target.Team.Name or "Aucune")
profileLabels["Âge"].Text = " Âge compte: " .. tostring(target.AccountAge) .. " jours"
if target.Character then
local hum = target.Character:FindFirstChildOfClass("Humanoid")
if hum then
profileLabels["Vie"].Text = " Vie: " .. math.floor(hum.Health) .. "/" .. tostring(hum.MaxHealth)
profileLabels["Vitesse"].Text = " Vitesse: " .. tostring(hum.WalkSpeed)
else
profileLabels["Vie"].Text = " Vie: N/A"
profileLabels["Vitesse"].Text = " Vitesse: N/A"
end
local hrp = target.Character:FindFirstChild("HumanoidRootPart")
if hrp then
local pos = hrp.Position
profileLabels["Position"].Text = string.format(" Pos: %.0f, %.0f, %.0f", pos.X, pos.Y, pos.Z)
else
profileLabels["Position"].Text = " Position: N/A"
end
local toolCount = 0
for _, c in target.Character:GetChildren() do
if c:IsA("Tool") then toolCount = toolCount + 1 end
end
local bp = target:FindFirstChildOfClass("Backpack")
if bp then
for _, c in bp:GetChildren() do
if c:IsA("Tool") then toolCount = toolCount + 1 end
end
end
profileLabels["Tools"].Text = " Tools: " .. tostring(toolCount)
profileLabels["Perso"].Text = " Personnage: présent"
else
profileLabels["Vie"].Text = ""
profileLabels["Vitesse"].Text = ""
profileLabels["Position"].Text = ""
profileLabels["Tools"].Text = ""
profileLabels["Perso"].Text = " Personnage: absent"
end
end
end
end
end)
end
-- Réapplication après respawn
player.CharacterAdded:Connect(function()
-- Libérer la souris immédiatement après le respawn
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
UserInputService.MouseIconEnabled = true
-- Nettoyer l'ancien _S.flyVelocity (lié au personnage mort)
if _S.flyVelocity then _S.flyVelocity = nil end
if _S.flyGyro then _S.flyGyro = nil end
task.wait(0.5)
if _S.speedEnabled then applySpeed() end
if _S.flyEnabled then setupFly() end
if _S.swimEnabled then setupSwim() end
-- TP SAVE AUTO: teleporter le joueur a la position sauvegardee apres la mort (ALT ou SIMPLE)
if (_S.tpSavePosEnabled or _S.tpSaveSimpleEnabled) and (_S.savedPlayerPosition or _S.savedPosition) then
task.spawn(function()
-- Attendre que le personnage soit bien charge (sans bloquer sur CharacterAdded:Wait)
local char = player.Character
if not char then
for i = 1, 10 do
task.wait(0.1)
char = player.Character
if char then break end
end
end
if not char then return end
-- Attendre le HumanoidRootPart
local hrp = char:WaitForChild("HumanoidRootPart", 5)
if hrp then
-- Teleporter avec retries (le jeu peut override la position au spawn)
for i = 1, 10 do
local c = player.Character
if c then
local h = c:FindFirstChild("HumanoidRootPart")
if h then
h.CFrame = _S.savedPlayerPosition or _S.savedPosition
end
end
task.wait(0.1)
end
end
end)
end
-- AFK: re-capturer le contrôleur immédiatement après le respawn pour rester actif
if _S.afkEnabled then
task.spawn(function()
task.wait(1)
pcall(function()
VirtualUser:CaptureController()
VirtualUser:ClickButton1(Vector2.new())
end)
end)
end
end)
-- SUPPRIMER LE PANEL (kill switch global)
killPanelBtn.MouseButton1Click:Connect(function()
-- Desactiver toutes les fonctionnalites
_S.espEnabled = false
_S.speedEnabled = false
_S.flyEnabled = false
_S.noclipEnabled = false
_S.afkEnabled = false
_S.infiniteJumpEnabled = false
_S.xrayEnabled = false
_S.nightVisionEnabled = false
_S.lockAllEnabled = false
_S.lockSelectedEnabled = false
_S.lockEnemyEnabled = false
_S.tpAllActive = false
_S.tpSavePosEnabled = false
-- Restaurer la vitesse normale
applySpeed()
-- Desactiver le fly
disableFly()
disableSwim()
-- Restaurer les collisions (noclip off)
local char = player.Character
if char then
for _, part in char:GetDescendants() do
if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
part.CanCollide = true
end
end
end
-- Restaurer l'eclairage (night vision off)
local lighting = game:GetService("Lighting")
lighting.Brightness = _S.nightVisionSavedLighting.Brightness or 2
lighting.Ambient = _S.nightVisionSavedLighting.Ambient or Color3.fromRGB(0, 0, 0)
lighting.OutdoorAmbient = _S.nightVisionSavedLighting.OutdoorAmbient or Color3.fromRGB(128, 128, 128)
lighting.ExposureCompensation = _S.nightVisionSavedLighting.ExposureCompensation or 0
_S.nightVisionSavedLighting = {}
-- Restaurer la transparence (xray off)
task.spawn(function()
local count = 0
for part, transp in pairs(_S.xraySavedTransparency) do
if part.Parent then
pcall(function() part.Transparency = transp end)
end
count = count + 1
if count >= 500 then
count = 0
task.wait()
end
end
_S.xraySavedTransparency = {}
end)
-- Supprimer l'ESP sur tous les joueurs
for _, p in Players:GetPlayers() do
removeESP(p)
end
-- Restaurer la camera
-- CameraType not forced to avoid sync errors with custom camera games
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then
camera.CameraSubject = hum
end
end
stopSpectate()
-- Tuer Omega si actif
if _S.omegaHasExecuted and not _S.omegaKilled then
_S.omegaKilled = true
for _, conn in ipairs(_S.omegaConnections) do
pcall(function() conn:Disconnect() end)
end
_S.omegaConnections = {}
for _, name in ipairs(_S.omegaRenderStepNames) do
pcall(function() RunService:UnbindFromRenderStep(name) end)
end
_S.omegaRenderStepNames = {}
for _, thread in ipairs(_S.omegaThreads) do
pcall(function() task.cancel(thread) end)
end
_S.omegaThreads = {}
for _, inst in ipairs(_S.omegaCreatedInstances) do
pcall(function()
if inst and inst.Parent then inst:Destroy() end
end)
end
_S.omegaCreatedInstances = {}
end
-- Supprimer uniquement les GUI Omega restants (seulement si Omega a ete execute)
if _S.omegaHasExecuted then
local playerGui = player:FindFirstChildOfClass("PlayerGui")
if playerGui then
for _, child in playerGui:GetChildren() do
if child.Name ~= "REDTIGER" and child.Name ~= "AFKTimer" and not _S.omegaGuiSnapshot[child] then
pcall(function() child:Destroy() end)
end
end
end
pcall(function()
local coreGui = game:GetService("CoreGui")
if coreGui then
for _, child in coreGui:GetChildren() do
if child.Name ~= "REDTIGER" and child.Name ~= "AFKTimer" and not _S.omegaCoreGuiSnapshot[child] then
pcall(function() child:Destroy() end)
end
end
end
end)
end
-- Debind les RenderStep de REDTIGER
pcall(function() RunService:UnbindFromRenderStep("REDTIGERMouse") end)
pcall(function() RunService:UnbindFromRenderStep("LockAim") end)
-- Restaurer le comportement de la souris
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
UserInputService.MouseIconEnabled = true
-- Supprimer les GUI REDTIGER
if _S.afkTimerGui then
pcall(function() _S.afkTimerGui:Destroy() end)
end
if gui then
gui:Destroy()
end
end)
print("[REDTIGER] Chargé - " .. player.Name .. " (ID: " .. player.UserId .. ")")
print("[REDTIGER] Appuyez sur K pour ouvrir/fermer le panel")No comments yet for this script.

![[KEYLESS] Moondiety Script | 17+ supported Games](https://scriptblox.com/images/sb/0-1753093706828.png)

