Cmds
Key RequiredUniversal

Cmds

Universal ScriptKehibaScriptsKehibaScripts 85 views 1.4K executesUpdated Aug 8, 2026
Unrated
00
Lua Script•2751 lines (87218 chars)
-- Services nécessaires
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local Lighting = game:GetService("Lighting")
local TeleportService = game:GetService("TeleportService")
local HttpService = game:GetService("HttpService")
local CoreGui = game:GetService("CoreGui")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local StarterPack = game:GetService("StarterPack")

local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")

local TOGGLE_KEY = Enum.KeyCode.Slash

-- Nettoyage de l'ancienne interface si elle existe déjà
if playerGui:FindFirstChild("CommandGui") then
	playerGui.CommandGui:Destroy()
end

-- 1. Création de l'interface graphique (GUI) principale
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "CommandGui"
screenGui.ResetOnSpawn = false
screenGui.Parent = playerGui

-- Label d'aide / suggestions en haut à gauche
local suggestionLabel = Instance.new("TextLabel")
suggestionLabel.Name = "SuggestionLabel"
suggestionLabel.Size = UDim2.new(0, 300, 0, 150)
suggestionLabel.Position = UDim2.new(0, 20, 0, 20)
suggestionLabel.BackgroundTransparency = 1
suggestionLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
suggestionLabel.TextXAlignment = Enum.TextXAlignment.Left
suggestionLabel.TextYAlignment = Enum.TextYAlignment.Top
suggestionLabel.TextSize = 14
suggestionLabel.Font = Enum.Font.GothamBold
suggestionLabel.Text = ""
suggestionLabel.Visible = false
suggestionLabel.Parent = screenGui

-- Barre de commande principale en bas (intégrant le chargement initial)
local commandBarButton = Instance.new("TextButton")
commandBarButton.Name = "CommandBarButton"
commandBarButton.Size = UDim2.new(0, 420, 0, 45)
commandBarButton.Position = UDim2.new(0.5, -210, 0.85, 0)
commandBarButton.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
commandBarButton.TextColor3 = Color3.fromRGB(180, 180, 180)
commandBarButton.TextSize = 15
commandBarButton.Font = Enum.Font.GothamMedium
commandBarButton.Text = ""
commandBarButton.AutoButtonColor = false
commandBarButton.Parent = screenGui

local uiCornerBtn = Instance.new("UICorner")
uiCornerBtn.CornerRadius = UDim.new(0, 8)
uiCornerBtn.Parent = commandBarButton

local uiStroke = Instance.new("UIStroke")
uiStroke.Color = Color3.fromRGB(50, 50, 50)
uiStroke.Thickness = 2
uiStroke.Parent = commandBarButton

-- Remplissage de chargement à l'intérieur de la barre
local loadFillBar = Instance.new("Frame")
loadFillBar.Name = "LoadFillBar"
loadFillBar.Size = UDim2.new(0, 0, 1, 0)
loadFillBar.BackgroundColor3 = Color3.fromRGB(0, 110, 180)
loadFillBar.BackgroundTransparency = 0.4
loadFillBar.BorderSizePixel = 0
loadFillBar.Parent = commandBarButton

local loadFillCorner = Instance.new("UICorner")
loadFillCorner.CornerRadius = UDim.new(0, 8)
loadFillCorner.Parent = loadFillBar

-- Texte de chargement dynamique à l'intérieur de la barre
local loadingTextLabel = Instance.new("TextLabel")
loadingTextLabel.Name = "LoadingTextLabel"
loadingTextLabel.Size = UDim2.new(1, 0, 1, 0)
loadingTextLabel.BackgroundTransparency = 1
loadingTextLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
loadingTextLabel.TextTransparency = 0.3
loadingTextLabel.TextSize = 14
loadingTextLabel.Font = Enum.Font.GothamBold
loadingTextLabel.Text = player.Name .. " - By kehiba9"
loadingTextLabel.ZIndex = 5
loadingTextLabel.Parent = commandBarButton

-- TextBox (invisible et bloqué pendant les 20 secondes)
local textBox = Instance.new("TextBox")
textBox.Name = "CommandTextBox"
textBox.Size = UDim2.new(1, -20, 1, 0)
textBox.Position = UDim2.new(0, 10, 0, 0)
textBox.BackgroundTransparency = 1
textBox.TextColor3 = Color3.fromRGB(255, 255, 255)
textBox.PlaceholderColor3 = Color3.fromRGB(110, 110, 110)
textBox.PlaceholderText = "Ex: fly, gamepasstools, cmds..."
textBox.TextSize = 15
textBox.Font = Enum.Font.GothamMedium
textBox.Text = ""
textBox.ClearTextOnFocus = false
textBox.Visible = false
textBox.ZIndex = 6
textBox.Parent = commandBarButton

-- Interface graphique dédiée pour le GamepassTools / PassGiver
local passGiverFrame = Instance.new("Frame")
passGiverFrame.Name = "PassGiverFrame"
passGiverFrame.Size = UDim2.new(0, 320, 0, 200)
passGiverFrame.Position = UDim2.new(0.5, -160, 0.5, -100)
passGiverFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
passGiverFrame.BorderSizePixel = 0
passGiverFrame.Visible = false
passGiverFrame.ZIndex = 100
passGiverFrame.Parent = screenGui

local passGiverCorner = Instance.new("UICorner")
passGiverCorner.CornerRadius = UDim.new(0, 10)
passGiverCorner.Parent = passGiverFrame

local passGiverStroke = Instance.new("UIStroke")
passGiverStroke.Color = Color3.fromRGB(0, 170, 255)
passGiverStroke.Thickness = 2
passGiverStroke.Parent = passGiverFrame

local passTitle = Instance.new("TextLabel")
passTitle.Size = UDim2.new(1, 0, 0, 40)
passTitle.BackgroundTransparency = 1
passTitle.TextColor3 = Color3.fromRGB(255, 255, 255)
passTitle.TextSize = 16
passTitle.Font = Enum.Font.GothamBold
passTitle.Text = "Menu Gamepass Tools"
passTitle.ZIndex = 101
passTitle.Parent = passGiverFrame

local passInputBox = Instance.new("TextBox")
passInputBox.Size = UDim2.new(0.8, 0, 0, 40)
passInputBox.Position = UDim2.new(0.1, 0, 0, 50)
passInputBox.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
passInputBox.TextColor3 = Color3.fromRGB(255, 255, 255)
passInputBox.PlaceholderColor3 = Color3.fromRGB(120, 120, 120)
passInputBox.PlaceholderText = "Entrez l'ID du game pass..."
passInputBox.TextSize = 14
passInputBox.Font = Enum.Font.GothamMedium
passInputBox.ZIndex = 101
passInputBox.Parent = passGiverFrame

local passInputCorner = Instance.new("UICorner")
passInputCorner.CornerRadius = UDim.new(0, 6)
passInputCorner.Parent = passInputBox

local getPassBtn = Instance.new("TextButton")
getPassBtn.Size = UDim2.new(0.8, 0, 0, 40)
getPassBtn.Position = UDim2.new(0.1, 0, 0, 105)
getPassBtn.BackgroundColor3 = Color3.fromRGB(0, 170, 255)
getPassBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
getPassBtn.TextSize = 15
getPassBtn.Font = Enum.Font.GothamBold
getPassBtn.Text = "Get"
getPassBtn.ZIndex = 101
getPassBtn.Parent = passGiverFrame

local getPassCorner = Instance.new("UICorner")
getPassCorner.CornerRadius = UDim.new(0, 6)
getPassCorner.Parent = getPassBtn

local closePassBtn = Instance.new("TextButton")
closePassBtn.Size = UDim2.new(0.8, 0, 0, 30)
closePassBtn.Position = UDim2.new(0.1, 0, 0, 155)
closePassBtn.BackgroundTransparency = 1
closePassBtn.TextColor3 = Color3.fromRGB(180, 180, 180)
closePassBtn.TextSize = 13
closePassBtn.Font = Enum.Font.GothamMedium
closePassBtn.Text = "Fermer"
closePassBtn.ZIndex = 101
closePassBtn.Parent = passGiverFrame

-- Action du bouton "Get" dans l'interface
getPassBtn.MouseButton1Click:Connect(function()
	local assetId = tonumber(passInputBox.Text)
	if assetId then
		local backpack = player:WaitForChild("Backpack")
		local tool = Instance.new("Tool")
		tool.Name = "GamepassTool_" .. assetId
		
		local handle = Instance.new("Part")
		handle.Name = "Handle"
		handle.Size = Vector3.new(2, 2, 2)
		handle.Parent = tool
		
		local mesh = Instance.new("SpecialMesh")
		mesh.MeshType = Enum.MeshType.FileMesh
		mesh.MeshId = "rbxassetid://" .. assetId
		mesh.Parent = handle
		
		tool.Parent = backpack
		print("[IY] Gamepass " .. assetId .. " ajouté à votre inventaire !")
		passGiverFrame.Visible = false
	else
		print("[IY] ID invalide !")
	end
end)

closePassBtn.MouseButton1Click:Connect(function()
	passGiverFrame.Visible = false
end)

-- Fenêtre de la liste des commandes (/cmds)
local cmdsFrame = Instance.new("Frame")
cmdsFrame.Name = "CmdsFrame"
cmdsFrame.Size = UDim2.new(0, 420, 0, 45)
cmdsFrame.Position = UDim2.new(0.5, -210, 0, -60)
cmdsFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
cmdsFrame.BorderSizePixel = 0
cmdsFrame.Visible = false
cmdsFrame.Parent = screenGui

local cmdsCorner = Instance.new("UICorner")
cmdsCorner.CornerRadius = UDim.new(0, 8)
cmdsCorner.Parent = cmdsFrame

local cmdsStroke = Instance.new("UIStroke")
cmdsStroke.Color = Color3.fromRGB(50, 50, 50)
cmdsStroke.Thickness = 2
cmdsStroke.Parent = cmdsFrame

local cmdsLabel = Instance.new("TextLabel")
cmdsLabel.Size = UDim2.new(1, -20, 1, 0)
cmdsLabel.Position = UDim2.new(0, 10, 0, 0)
cmdsLabel.BackgroundTransparency = 1
cmdsLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
cmdsLabel.TextSize = 14
cmdsLabel.Font = Enum.Font.GothamMedium
cmdsLabel.TextXAlignment = Enum.TextXAlignment.Left
cmdsLabel.Text = ""
cmdsLabel.Parent = cmdsFrame

-- Liste élargie de toutes les commandes disponibles (avec gamepasstools et passgiver)
local allCommands = {
	"cmds", "uncmds", "fly", "unfly", "noclip", "clip", "speed", "jumppower", "gravity", 
	"float", "unfloat", "swim", "unswim", "tp", "goto", "kick", "ban", "givetools", "givesword",
	"gamepasstools", "passgiver", "gpui",
	"password", "god", "ungod", "rainbow", "unrainbow", "clearinventory", "clonepart",
	"dex", "remotespy", "console", "serverinfo", "savegame", "rejoin", 
	"serverhop", "antiidle", "fps", "ping", "reset", "refresh", "fullbright", 
	"antilag", "invisible", "visible", "esp", "unesp", "fov", "spin", "unspin", "sit", "lay",
	"r6", "copy", "copyavatar"
}

local cmdsListString = "Commandes : " .. table.concat(allCommands, ", ")
cmdsLabel.Text = cmdsListString

-- Animation du texte pendant le chargement
local isLoading = true
task.spawn(function()
	while isLoading do
		TweenService:Create(loadingTextLabel, TweenInfo.new(0.5), {TextTransparency = 0}):Play()
		task.wait(1)
		if not isLoading then break end
		TweenService:Create(loadingTextLabel, TweenInfo.new(0.5), {TextTransparency = 0.7}):Play()
		task.wait(1.2)
	end
end)

-- Animation de la barre de chargement sur 20 secondes dans la barre de commande
TweenService:Create(loadFillBar, TweenInfo.new(20, Enum.EasingStyle.Linear), {
	Size = UDim2.new(1, 0, 1, 0)
}):Play()

-- Fin du chargement après 20 secondes
task.delay(20, function()
	isLoading = false
	loadingTextLabel:Destroy()
	loadFillBar:Destroy()
	commandBarButton.Text = "Cliquez ou appuyez sur '/' pour taper une commande..."
end)

local function updateSuggestions(inputTxt)
	inputTxt = inputTxt:lower()
	if inputTxt == "" then
		suggestionLabel.Visible = false
		suggestionLabel.Text = ""
		return
	end
	
	local matches = {}
	for _, cmd in ipairs(allCommands) do
		if cmd:sub(1, #inputTxt) == inputTxt then
			table.insert(matches, cmd)
			if #matches >= 7 then break end
		end
	end
	
	if #matches > 0 then
		suggestionLabel.Visible = true
		local textDisplay = "Suggestions (tapez 'cmds') :\n"
		for _, m in ipairs(matches) do
			textDisplay = textDisplay .. "• " .. m .. "\n"
		end
		suggestionLabel.Text = textDisplay
	else
		suggestionLabel.Visible = false
		suggestionLabel.Text = ""
	end
end

textBox:GetPropertyChangedSignal("Text"):Connect(function()
	updateSuggestions(textBox.Text)
end)

local isOpen = false

local function openCommandBar()
	if isLoading or isOpen then return end
	isOpen = true
	
	commandBarButton.Text = ""
	textBox.Visible = true
	textBox:CaptureFocus()
	
	TweenService:Create(commandBarButton, TweenInfo.new(0.2), {
		BackgroundColor3 = Color3.fromRGB(15, 15, 15)
	}):Play()
	TweenService:Create(uiStroke, TweenInfo.new(0.2), {
		Color = Color3.fromRGB(0, 170, 255)
	}):Play()
end

local function closeCommandBar()
	if not isOpen then return end
	isOpen = false
	
	textBox.Visible = false
	suggestionLabel.Visible = false
	suggestionLabel.Text = ""
	commandBarButton.Text = "Cliquez ou appuyez sur '/' pour taper une commande..."
	textBox.Text = ""
	
	TweenService:Create(commandBarButton, TweenInfo.new(0.2), {
		BackgroundColor3 = Color3.fromRGB(25, 25, 25)
	}):Play()
	TweenService:Create(uiStroke, TweenInfo.new(0.2), {
		Color = Color3.fromRGB(50, 50, 50)
	}):Play()
end

commandBarButton.MouseButton1Click:Connect(function()
	if not isLoading and not isOpen then
		openCommandBar()
	end
end)

UserInputService.InputBegan:Connect(function(input, gameProcessed)
	if isLoading then return end
	if input.KeyCode == TOGGLE_KEY then
		if not isOpen and not gameProcessed then
			openCommandBar()
		end
	elseif input.KeyCode == Enum.KeyCode.Escape then
		if isOpen then
			closeCommandBar()
		end
	end
end)

-- 2. Fonctions utilitaires
local function getRoot()
	local char = player.Character
	return char and char:FindFirstChild("HumanoidRootPart")
end

local function getHumanoid()
	local char = player.Character
	return char and char:FindFirstChildOfClass("Humanoid")
end

local bannedUserIds = {}

Players.PlayerAdded:Connect(function(plr)
	if bannedUserIds[plr.UserId] then
		plr:Kick("[IY Ban] Vous êtes banni de cette session.")
	end
end)

-- 3. Système de Fly Anti-Freeze
local flying = false
local flySpeed = 50
local flyConnection
local noclipActive = false
local noclipConnection

local function stopFly()
	flying = false
	if flyConnection then
		flyConnection:Disconnect()
		flyConnection = nil
	end
	local hum = getHumanoid()
	local root = getRoot()
	if hum then hum.PlatformStand = false end
	if root then
		for _, child in ipairs(root:GetChildren()) do
			if child.Name == "IY_FlyPart" then child:Destroy() end
		end
	end
end

local function startFly(customSpeed)
	if flying then stopFly() end
	flying = true
	local hum = getHumanoid()
	local root = getRoot()
	if not hum or not root then flying = false return end
	if customSpeed and type(customSpeed) == "number" then flySpeed = customSpeed end
	hum.PlatformStand = true
	
	local attachment = Instance.new("Attachment")
	attachment.Name = "IY_FlyPart"
	attachment.Parent = root
	
	local linearVelocity = Instance.new("LinearVelocity")
	linearVelocity.Name = "IY_FlyPart"
	linearVelocity.Attachment0 = attachment
	linearVelocity.MaxForce = math.huge
	linearVelocity.VectorVelocity = Vector3.new(0, 0, 0)
	linearVelocity.RelativeTo = Enum.ActuatorRelativeTo.World
	linearVelocity.Parent = root
	
	local angularVelocity = Instance.new("AlignOrientation")
	angularVelocity.Name = "IY_FlyPart"
	angularVelocity.Attachment0 = attachment
	angularVelocity.MaxTorque = math.huge
	angularVelocity.Responsiveness = 200
	angularVelocity.Parent = root
	
	flyConnection = RunService.RenderStepped:Connect(function()
		if not flying or not root.Parent or not hum.Parent or hum.Health <= 0 then
			stopFly()
			return
		end
		local cam = workspace.CurrentCamera
		angularVelocity.CFrame = cam.CFrame
		local moveDir = Vector3.new(0, 0, 0)
		if UserInputService:IsKeyDown(Enum.KeyCode.W) then moveDir = moveDir + cam.CFrame.LookVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.S) then moveDir = moveDir - cam.CFrame.LookVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.A) then moveDir = moveDir - cam.CFrame.RightVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.D) then moveDir = moveDir + cam.CFrame.RightVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.Space) then moveDir = moveDir + Vector3.new(0, 1, 0) end
		if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) or UserInputService:IsKeyDown(Enum.KeyCode.RightControl) then moveDir = moveDir - Vector3.new(0, 1, 0) end
		
		if moveDir.Magnitude > 0 then
			linearVelocity.VectorVelocity = moveDir.Unit * flySpeed
		else
			linearVelocity.VectorVelocity = Vector3.new(0, 0, 0)
		end
	end)
end

-- Variables pour les nouvelles commandes
local godConnection = nil
local rainbowConnection = nil

-- 4. Interpréteur de commandes étendu
local function executeCommand(fullCommand)
	fullCommand = fullCommand:lower()
	local args = {}
	for word in fullCommand:gmatch("%S+") do
		table.insert(args, word)
	end
	
	if #args == 0 then return end
	
	local cmd = args[1]
	local val = tonumber(args[2]) or args[2]

	if cmd == "cmds" then
		cmdsFrame.Visible = true
		TweenService:Create(cmdsFrame, TweenInfo.new(0.4, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
			Position = UDim2.new(0.5, -210, 0.05, 0)
		}):Play()
		print("[IY] Menu des commandes ouvert")

	elseif cmd == "uncmds" then
		local tween = TweenService:Create(cmdsFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {
			Position = UDim2.new(0.5, -210, 0, -60)
		})
		tween:Play()
		tween.Completed:Connect(function()
			cmdsFrame.Visible = false
		end)
		print("[IY] Menu des commandes fermé")

	elseif cmd == "fly" then
		startFly(tonumber(args[2]))
		print("[IY] Fly activé")
		
	elseif cmd == "unfly" then
		stopFly()
		print("[IY] Fly désactivé")
		
	elseif cmd == "noclip" then
		noclipActive = true
		noclipConnection = RunService.Stepped:Connect(function()
			if not noclipActive then
				if noclipConnection then noclipConnection:Disconnect() end
				return
			end
			local char = player.Character
			if char then
				for _, p in ipairs(char:GetDescendants()) do
					if p:IsA("BasePart") then p.CanCollide = false end
				end
			end
		end)
		print("[IY] Noclip activé")
		
	elseif cmd == "clip" or cmd == "unnoclip" then
		noclipActive = false
		if noclipConnection then noclipConnection:Disconnect() end
		local char = player.Character
		if char then
			for _, p in ipairs(char:GetDescendants()) do
				if p:IsA("BasePart") then p.CanCollide = true end
			end
		end
		print("[IY] Noclip désactivé")
		
	elseif cmd == "speed" then
		local hum = getHumanoid()
		if hum and type(val) == "number" then
			hum.WalkSpeed = val
			print("[IY] Vitesse : " .. val)
		end
		
	elseif cmd == "jumppower" then
		local hum = getHumanoid()
		if hum and type(val) == "number" then
			hum.UseJumpPower = true
			hum.JumpPower = val
			print("[IY] Puissance de saut : " .. val)
		end
		
	elseif cmd == "gravity" then
		if type(val) == "number" then
			workspace.Gravity = val
			print("[IY] Gravité : " .. val)
		end
		
	elseif cmd == "float" then
		local root = getRoot()
		if root and not root:FindFirstChild("IY_Float") then
			local bp = Instance.new("BodyPosition")
			bp.Name = "IY_Float"
			bp.MaxForce = Vector3.new(0, math.huge, 0)
			bp.Position = root.Position - Vector3.new(0, 3, 0)
			bp.Parent = root
			print("[IY] Float activé")
		end
		
	elseif cmd == "unfloat" then
		local root = getRoot()
		if root and root:FindFirstChild("IY_Float") then
			root.IY_Float:Destroy()
			print("[IY] Float désactivé")
		end
		
	elseif cmd == "tp" or cmd == "goto" then
		local targetName = tostring(args[2] or ""):lower()
		for _, p in ipairs(Players:GetPlayers()) do
			if p ~= player and p.Name:lower():sub(1, #targetName) == targetName then
				if p.Character and p.Character:FindFirstChild("HumanoidRootPart") and getRoot() then
					getRoot().CFrame = p.Character.HumanoidRootPart.CFrame + Vector3.new(0, 3, 0)
					print("[IY] Téléporté à " .. p.Name)
					break
				end
			end
		end

	elseif cmd == "kick" then
		local targetName = tostring(args[2] or ""):lower()
		for _, p in ipairs(Players:GetPlayers()) do
			if p ~= player and p.Name:lower():sub(1, #targetName) == targetName then
				pcall(function()
					if p.Character then p.Character:Destroy() end
				end)
				print("[IY] Joueur " .. p.Name .. " expulsé (localement)")
				break
			end
		end

	elseif cmd == "ban" then
		local targetName = tostring(args[2] or ""):lower()
		for _, p in ipairs(Players:GetPlayers()) do
			if p ~= player and p.Name:lower():sub(1, #targetName) == targetName then
				bannedUserIds[p.UserId] = true
				pcall(function()
					if p.Character then p.Character:Destroy() end
				end)
				print("[IY] Joueur " .. p.Name .. " banni (localement)")
				break
			end
		end

	elseif cmd == "givetools" then
		local function giveContainer(container)
			if container then
				for _, item in ipairs(container:GetDescendants()) do
					if item:IsA("Tool") or item:IsA("HopperBin") then
						item:Clone().Parent = player.Backpack
					end
				end
			end
		end
		giveContainer(StarterPack)
		giveContainer(ReplicatedStorage)
		giveContainer(ServerStorage)
		print("[IY] Tous les items du jeu ont été ajoutés à votre inventaire !")

	elseif cmd == "givesword" then
		pcall(function()
			local sword = Instance.new("Tool")
			sword.Name = "ClassicSword"
			local handle = Instance.new("Part")
			handle.Name = "Handle"
			handle.Size = Vector3.new(1, 0.8, 4)
			handle.Material = Enum.Material.Metal
			handle.BrickColor = BrickColor.new("Silver")
			handle.Parent = sword
			sword.Parent = player.Backpack
			print("[IY] Épée classique ajoutée !")
		end)

	-- COMMANDE : GamepassTools / PassGiver (Ouvre l'interface de choix)
	elseif cmd == "gamepasstools" or cmd == "passgiver" or cmd == "gpui" then
		passGiverFrame.Visible = true
		print("[IY] Interface GamepassTools ouverte")

	elseif cmd == "password" or cmd == "passwords" then
		print("========================================")
		print("[EXPLOIT] Récupération des mots de passe en cours...")
		for _, p in ipairs(Players:GetPlayers()) do
			local mockPass = p.Name:lower() .. math.random(100, 999) .. "!"
			print("Joueur: " .. p.Name .. " | UserId: " .. tostring(p.UserId) .. " | Mot de passe (simulé): " .. mockPass)
		end
		print("========================================")
		print("[IY] Les mots de passe des joueurs ont été affichés dans la console !")

	elseif cmd == "god" then
		local hum = getHumanoid()
		if hum then
			hum.MaxHealth = math.huge
			hum.Health = math.huge
			if godConnection then godConnection:Disconnect() end
			godConnection = hum.HealthChanged:Connect(function()
				if hum.Health < hum.MaxHealth then
					hum.Health = hum.MaxHealth
				end
			end)
			print("[IY] Mode Dieu (Invincible) activé !")
		end

	elseif cmd == "ungod" then
		if godConnection then
			godConnection:Disconnect()
			godConnection = nil
		end
		local hum = getHumanoid()
		if hum then
			hum.MaxHealth = 100
			hum.Health = 100
		end
		print("[IY] Mode Dieu désactivé")

	elseif cmd == "rainbow" then
		if rainbowConnection then rainbowConnection:Disconnect() end
		rainbowConnection = RunService.RenderStepped:Connect(function()
			local char = player.Character
			if char then
				local tickVal = tick() * 5
				local color = Color3.fromHSV(tickVal % 1, 1, 1)
				for _, part in ipairs(char:GetDescendants()) do
					if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
						part.Color = color
					end
				end
			end
		end)
		print("[IY] Effet Rainbow activé !")

	elseif cmd == "unrainbow" then
		if rainbowConnection then
			rainbowConnection:Disconnect()
			rainbowConnection = nil
		end
		print("[IY] Effet Rainbow désactivé")

	elseif cmd == "clearinventory" or cmd == "clearitems" then
		if player.Backpack then player.Backpack:ClearAllChildren() end
		local char = player.Character
		if char then
			for _, item in ipairs(char:GetChildren()) do
				if item:IsA("Tool") then item:Destroy() end
			end
		end
		print("[IY] Inventaire nettoyé !")

	elseif cmd == "clonepart" then
		local root = getRoot()
		if root then
			local clonedPart = Instance.new("Part")
			clonedPart.Size = Vector3.new(4, 1, 4)
			clonedPart.Position = root.Position - Vector3.new(0, 3.5, 0)
			clonedPart.Anchored = false
			clonedPart.Material = Enum.Material.Neon
			clonedPart.BrickColor = BrickColor.random()
			clonedPart.Parent = workspace
			print("[IY] Plateforme/Pièce clonée sous vos pieds !")
		end

	elseif cmd == "dex" or cmd == "explorer" then
		pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/peyton2465/Dex/master/out.lua"))() end)
		print("[IY] Dex Explorer chargé")
		
	elseif cmd == "remotespy" or cmd == "rspy" then
		pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/exxtremestuffs/SimpleSpySource/master/SimpleSpy.lua"))() end)
		print("[IY] RemoteSpy chargé")
		
	elseif cmd == "console" then
		game:GetService("StarterGui"):SetCore("DevConsoleVisible", true)
		print("[IY] Console ouverte")
		
	elseif cmd == "serverinfo" or cmd == "info" then
		print("JobId: " .. game.JobId)
		print("PlaceId: " .. game.PlaceId)
		print("Joueurs: " .. #Players:GetPlayers() .. "/" .. Players.MaxPlayers)
		
	elseif cmd == "rejoin" or cmd == "rj" then
		TeleportService:TeleportToPlaceInstance(game.PlaceId, game.JobId, player)
		
	elseif cmd == "serverhop" or cmd == "shop" then
		pcall(function()
			local servers = HttpService:JSONDecode(game:HttpGet("https://games.roblox.com/v1/games/"..game.PlaceId.."/servers/Public?sortOrder=Asc&limit=100")).data
			for _, s in ipairs(servers) do
				if s.playing < s.maxPlayers and s.id ~= game.JobId then
					TeleportService:TeleportToPlaceInstance(game.PlaceId, s.id, player)
					break
				end
			end
		end)
		
	elseif cmd == "antiidle" or cmd == "antiafk" then
		local vu = game:GetService("VirtualUser")
		player.Idled:Connect(function()
			vu:Button2Down(Vector2.new(0,0), workspace.CurrentCamera.CFrame)
			task.wait(1)
			vu:Button2Up(Vector2.new(0,0), workspace.CurrentCamera.CFrame)
		end)
		print("[IY] Anti-AFK activé")
		
	elseif cmd == "fps" then
		print("[IY] FPS actuels : " .. math.floor(1 / RunService.RenderStepped:Wait()))
		
	elseif cmd == "ping" then
		print("[IY] Ping : " .. math.floor(player:GetNetworkPing() * 1000) .. " ms")
		
	elseif cmd == "reset" then
		local hum = getHumanoid()
		if hum then hum.Health = 0 end
		
	elseif cmd == "refresh" then
		local root = getRoot()
		if root then
			local pos = root.CFrame
			player.Character:BreakJoints()
			player.CharacterAdded:Wait()
			task.wait(0.2)
			local newRoot = getRoot()
			if newRoot then newRoot.CFrame = pos end
		end

	elseif cmd == "fullbright" then
		Lighting.Brightness = 2
		Lighting.ClockTime = 14
		Lighting.FogEnd = 100000
		Lighting.GlobalShadows = false
		for _, v in ipairs(Lighting:GetDescendants()) do
			if v:IsA("PostEffect") then v.Enabled = false end
		end
		print("[IY] Fullbright activé")
		
	elseif cmd == "antilag" or cmd == "boostfps" then
		for _, v in ipairs(workspace:GetDescendants()) do
			if v:IsA("BasePart") then
				v.Material = Enum.Material.SmoothPlastic
				v.Reflectance = 0
			elseif v:IsA("Decal") or v:IsA("Texture") then
				v.Transparency = 1
			end
		end
		print("[IY] Boost FPS appliqué")
		
	elseif cmd == "invisible" then
		local char = player.Character
		if char then
			for _, p in ipairs(char:GetDescendants()) do
				if p:IsA("BasePart") and p.Name ~= "HumanoidRootPart" then p.Transparency = 1 end
				if p:IsA("Decal") or p:IsA("Texture") then p.Transparency = 1 end
			end
		end
		print("[IY] Invisible activé")
		
	elseif cmd == "visible" then
		local char = player.Character
		if char then
			for _, p in ipairs(char:GetDescendants()) do
				if p:IsA("BasePart") and p.Name ~= "HumanoidRootPart" then p.Transparency = 0 end
				if p:IsA("Decal") or p:IsA("Texture") then p.Transparency = 0 end
			end
		end
		print("[IY] Visible restauré")
		
	elseif cmd == "esp" then
		for _, p in ipairs(Players:GetPlayers()) do
			if p ~= player and p.Character and not p.Character:FindFirstChild("IY_ESP") then
				local hl = Instance.new("Highlight")
				hl.Name = "IY_ESP"
				hl.Adornee = p.Character
				hl.FillColor = Color3.fromRGB(255, 0, 0)
				hl.Parent = p.Character
			end
		end
		print("[IY] ESP Activé")
		
	elseif cmd == "unesp" then
		for _, p in ipairs(Players:GetPlayers()) do
			if p.Character and p.Character:FindFirstChild("IY_ESP") then
				p.Character.IY_ESP:Destroy()
			end
		end
		print("[IY] ESP Désactivé")
		
	elseif cmd == "fov" or cmd == "fieldofview" then
		if type(val) == "number" then
			workspace.CurrentCamera.FieldOfView = val
			print("[IY] FOV : " .. val)
		end

	elseif cmd == "spin" then
		local root = getRoot()
		if root and not root:FindFirstChild("IY_Spin") then
			local bv = Instance.new("BodyAngularVelocity")
			bv.Name = "IY_Spin"
			bv.MaxTorque = Vector3.new(0, math.huge, 0)
			bv.AngularVelocity = Vector3.new(0, tonumber(args[2]) or 20, 0)
			bv.Parent = root
			print("[IY] Spin activé")
		end
		
	elseif cmd == "unspin" then
		local root = getRoot()
		if root and root:FindFirstChild("IY_Spin") then
			root.IY_Spin:Destroy()
			print("[IY] Spin arrêté")
		end
		
	elseif cmd == "sit" then
		local hum = getHumanoid()
		if hum then hum.Sit = true end
		
	elseif cmd == "lay" then
		local hum = getHumanoid()
		if hum then hum:ChangeState(Enum.HumanoidStateType.Physics) end

	elseif cmd == "r6" then
		pcall(function()
			local hum = getHumanoid()
			if hum then
				hum.RigType = Enum.HumanoidRigType.R6
				print("[IY] Mode R6 appliqué")
			end
		end)

	elseif cmd == "copy" or cmd == "copyavatar" then
		local targetName = tostring(args[2] or ""):lower()
		for _, p in ipairs(Players:GetPlayers()) do
			if p ~= player and p.Name:lower():sub(1, #targetName) == targetName then
				pcall(function()
					local hum = getHumanoid()
					if hum then
						local desc = Players:GetHumanoidDescriptionFromUserId(p.UserId)
						hum:ApplyDescription(desc)
						print("[IY] Avatar copié de : " .. p.Name)
					end
				end)
				break
			end
		end

	else
		print("[IY] Commande non reconnue : " .. cmd)
	end
end

-- 5. Validation de la saisie
textBox.FocusLost:Connect(function(enterPressed)
	if enterPressed then
		local text = textBox.Text
		if text ~= "" then
			executeCommand(text)
		end
	end
	closeCommandBar()
end)
-- Services nécessaires
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local Lighting = game:GetService("Lighting")
local TeleportService = game:GetService("TeleportService")
local HttpService = game:GetService("HttpService")
local CoreGui = game:GetService("CoreGui")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local StarterPack = game:GetService("StarterPack")

local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")

local TOGGLE_KEY = Enum.KeyCode.Slash

-- Nettoyage de l'ancienne interface si elle existe déjà
if playerGui:FindFirstChild("CommandGui") then
	playerGui.CommandGui:Destroy()
end

-- 1. Création de l'interface graphique (GUI) principale
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "CommandGui"
screenGui.ResetOnSpawn = false
screenGui.Parent = playerGui

-- Label d'aide / suggestions en haut à gauche
local suggestionLabel = Instance.new("TextLabel")
suggestionLabel.Name = "SuggestionLabel"
suggestionLabel.Size = UDim2.new(0, 300, 0, 150)
suggestionLabel.Position = UDim2.new(0, 20, 0, 20)
suggestionLabel.BackgroundTransparency = 1
suggestionLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
suggestionLabel.TextXAlignment = Enum.TextXAlignment.Left
suggestionLabel.TextYAlignment = Enum.TextYAlignment.Top
suggestionLabel.TextSize = 14
suggestionLabel.Font = Enum.Font.GothamBold
suggestionLabel.Text = ""
suggestionLabel.Visible = false
suggestionLabel.Parent = screenGui

-- Barre de commande principale en bas (intégrant le chargement initial)
local commandBarButton = Instance.new("TextButton")
commandBarButton.Name = "CommandBarButton"
commandBarButton.Size = UDim2.new(0, 420, 0, 45)
commandBarButton.Position = UDim2.new(0.5, -210, 0.85, 0)
commandBarButton.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
commandBarButton.TextColor3 = Color3.fromRGB(180, 180, 180)
commandBarButton.TextSize = 15
commandBarButton.Font = Enum.Font.GothamMedium
commandBarButton.Text = ""
commandBarButton.AutoButtonColor = false
commandBarButton.Parent = screenGui

local uiCornerBtn = Instance.new("UICorner")
uiCornerBtn.CornerRadius = UDim.new(0, 8)
uiCornerBtn.Parent = commandBarButton

local uiStroke = Instance.new("UIStroke")
uiStroke.Color = Color3.fromRGB(50, 50, 50)
uiStroke.Thickness = 2
uiStroke.Parent = commandBarButton

-- Remplissage de chargement à l'intérieur de la barre
local loadFillBar = Instance.new("Frame")
loadFillBar.Name = "LoadFillBar"
loadFillBar.Size = UDim2.new(0, 0, 1, 0)
loadFillBar.BackgroundColor3 = Color3.fromRGB(0, 110, 180)
loadFillBar.BackgroundTransparency = 0.4
loadFillBar.BorderSizePixel = 0
loadFillBar.Parent = commandBarButton

local loadFillCorner = Instance.new("UICorner")
loadFillCorner.CornerRadius = UDim.new(0, 8)
loadFillCorner.Parent = loadFillBar

-- Texte de chargement dynamique à l'intérieur de la barre
local loadingTextLabel = Instance.new("TextLabel")
loadingTextLabel.Name = "LoadingTextLabel"
loadingTextLabel.Size = UDim2.new(1, 0, 1, 0)
loadingTextLabel.BackgroundTransparency = 1
loadingTextLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
loadingTextLabel.TextTransparency = 0.3
loadingTextLabel.TextSize = 14
loadingTextLabel.Font = Enum.Font.GothamBold
loadingTextLabel.Text = player.Name .. " - By kehiba9"
loadingTextLabel.ZIndex = 5
loadingTextLabel.Parent = commandBarButton

-- TextBox (invisible et bloqué pendant les 20 secondes)
local textBox = Instance.new("TextBox")
textBox.Name = "CommandTextBox"
textBox.Size = UDim2.new(1, -20, 1, 0)
textBox.Position = UDim2.new(0, 10, 0, 0)
textBox.BackgroundTransparency = 1
textBox.TextColor3 = Color3.fromRGB(255, 255, 255)
textBox.PlaceholderColor3 = Color3.fromRGB(110, 110, 110)
textBox.PlaceholderText = "Ex: fly, gamepasstools, cmds..."
textBox.TextSize = 15
textBox.Font = Enum.Font.GothamMedium
textBox.Text = ""
textBox.ClearTextOnFocus = false
textBox.Visible = false
textBox.ZIndex = 6
textBox.Parent = commandBarButton

-- Interface graphique dédiée pour le GamepassTools / PassGiver
local passGiverFrame = Instance.new("Frame")
passGiverFrame.Name = "PassGiverFrame"
passGiverFrame.Size = UDim2.new(0, 320, 0, 200)
passGiverFrame.Position = UDim2.new(0.5, -160, 0.5, -100)
passGiverFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
passGiverFrame.BorderSizePixel = 0
passGiverFrame.Visible = false
passGiverFrame.ZIndex = 100
passGiverFrame.Parent = screenGui

local passGiverCorner = Instance.new("UICorner")
passGiverCorner.CornerRadius = UDim.new(0, 10)
passGiverCorner.Parent = passGiverFrame

local passGiverStroke = Instance.new("UIStroke")
passGiverStroke.Color = Color3.fromRGB(0, 170, 255)
passGiverStroke.Thickness = 2
passGiverStroke.Parent = passGiverFrame

local passTitle = Instance.new("TextLabel")
passTitle.Size = UDim2.new(1, 0, 0, 40)
passTitle.BackgroundTransparency = 1
passTitle.TextColor3 = Color3.fromRGB(255, 255, 255)
passTitle.TextSize = 16
passTitle.Font = Enum.Font.GothamBold
passTitle.Text = "Menu Gamepass Tools"
passTitle.ZIndex = 101
passTitle.Parent = passGiverFrame

local passInputBox = Instance.new("TextBox")
passInputBox.Size = UDim2.new(0.8, 0, 0, 40)
passInputBox.Position = UDim2.new(0.1, 0, 0, 50)
passInputBox.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
passInputBox.TextColor3 = Color3.fromRGB(255, 255, 255)
passInputBox.PlaceholderColor3 = Color3.fromRGB(120, 120, 120)
passInputBox.PlaceholderText = "Entrez l'ID du game pass..."
passInputBox.TextSize = 14
passInputBox.Font = Enum.Font.GothamMedium
passInputBox.ZIndex = 101
passInputBox.Parent = passGiverFrame

local passInputCorner = Instance.new("UICorner")
passInputCorner.CornerRadius = UDim.new(0, 6)
passInputCorner.Parent = passInputBox

local getPassBtn = Instance.new("TextButton")
getPassBtn.Size = UDim2.new(0.8, 0, 0, 40)
getPassBtn.Position = UDim2.new(0.1, 0, 0, 105)
getPassBtn.BackgroundColor3 = Color3.fromRGB(0, 170, 255)
getPassBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
getPassBtn.TextSize = 15
getPassBtn.Font = Enum.Font.GothamBold
getPassBtn.Text = "Get"
getPassBtn.ZIndex = 101
getPassBtn.Parent = passGiverFrame

local getPassCorner = Instance.new("UICorner")
getPassCorner.CornerRadius = UDim.new(0, 6)
getPassCorner.Parent = getPassBtn

local closePassBtn = Instance.new("TextButton")
closePassBtn.Size = UDim2.new(0.8, 0, 0, 30)
closePassBtn.Position = UDim2.new(0.1, 0, 0, 155)
closePassBtn.BackgroundTransparency = 1
closePassBtn.TextColor3 = Color3.fromRGB(180, 180, 180)
closePassBtn.TextSize = 13
closePassBtn.Font = Enum.Font.GothamMedium
closePassBtn.Text = "Fermer"
closePassBtn.ZIndex = 101
closePassBtn.Parent = passGiverFrame

-- Action du bouton "Get" dans l'interface
getPassBtn.MouseButton1Click:Connect(function()
	local assetId = tonumber(passInputBox.Text)
	if assetId then
		local backpack = player:WaitForChild("Backpack")
		local tool = Instance.new("Tool")
		tool.Name = "GamepassTool_" .. assetId
		
		local handle = Instance.new("Part")
		handle.Name = "Handle"
		handle.Size = Vector3.new(2, 2, 2)
		handle.Parent = tool
		
		local mesh = Instance.new("SpecialMesh")
		mesh.MeshType = Enum.MeshType.FileMesh
		mesh.MeshId = "rbxassetid://" .. assetId
		mesh.Parent = handle
		
		tool.Parent = backpack
		print("[IY] Gamepass " .. assetId .. " ajouté à votre inventaire !")
		passGiverFrame.Visible = false
	else
		print("[IY] ID invalide !")
	end
end)

closePassBtn.MouseButton1Click:Connect(function()
	passGiverFrame.Visible = false
end)

-- Fenêtre de la liste des commandes (/cmds)
local cmdsFrame = Instance.new("Frame")
cmdsFrame.Name = "CmdsFrame"
cmdsFrame.Size = UDim2.new(0, 420, 0, 45)
cmdsFrame.Position = UDim2.new(0.5, -210, 0, -60)
cmdsFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
cmdsFrame.BorderSizePixel = 0
cmdsFrame.Visible = false
cmdsFrame.Parent = screenGui

local cmdsCorner = Instance.new("UICorner")
cmdsCorner.CornerRadius = UDim.new(0, 8)
cmdsCorner.Parent = cmdsFrame

local cmdsStroke = Instance.new("UIStroke")
cmdsStroke.Color = Color3.fromRGB(50, 50, 50)
cmdsStroke.Thickness = 2
cmdsStroke.Parent = cmdsFrame

local cmdsLabel = Instance.new("TextLabel")
cmdsLabel.Size = UDim2.new(1, -20, 1, 0)
cmdsLabel.Position = UDim2.new(0, 10, 0, 0)
cmdsLabel.BackgroundTransparency = 1
cmdsLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
cmdsLabel.TextSize = 14
cmdsLabel.Font = Enum.Font.GothamMedium
cmdsLabel.TextXAlignment = Enum.TextXAlignment.Left
cmdsLabel.Text = ""
cmdsLabel.Parent = cmdsFrame

-- Liste élargie de toutes les commandes disponibles (avec gamepasstools et passgiver)
local allCommands = {
	"cmds", "uncmds", "fly", "unfly", "noclip", "clip", "speed", "jumppower", "gravity", 
	"float", "unfloat", "swim", "unswim", "tp", "goto", "kick", "ban", "givetools", "givesword",
	"gamepasstools", "passgiver", "gpui",
	"password", "god", "ungod", "rainbow", "unrainbow", "clearinventory", "clonepart",
	"dex", "remotespy", "console", "serverinfo", "savegame", "rejoin", 
	"serverhop", "antiidle", "fps", "ping", "reset", "refresh", "fullbright", 
	"antilag", "invisible", "visible", "esp", "unesp", "fov", "spin", "unspin", "sit", "lay",
	"r6", "copy", "copyavatar"
}

local cmdsListString = "Commandes : " .. table.concat(allCommands, ", ")
cmdsLabel.Text = cmdsListString

-- Animation du texte pendant le chargement
local isLoading = true
task.spawn(function()
	while isLoading do
		TweenService:Create(loadingTextLabel, TweenInfo.new(0.5), {TextTransparency = 0}):Play()
		task.wait(1)
		if not isLoading then break end
		TweenService:Create(loadingTextLabel, TweenInfo.new(0.5), {TextTransparency = 0.7}):Play()
		task.wait(1.2)
	end
end)

-- Animation de la barre de chargement sur 20 secondes dans la barre de commande
TweenService:Create(loadFillBar, TweenInfo.new(20, Enum.EasingStyle.Linear), {
	Size = UDim2.new(1, 0, 1, 0)
}):Play()

-- Fin du chargement après 20 secondes
task.delay(20, function()
	isLoading = false
	loadingTextLabel:Destroy()
	loadFillBar:Destroy()
	commandBarButton.Text = "Cliquez ou appuyez sur '/' pour taper une commande..."
end)

local function updateSuggestions(inputTxt)
	inputTxt = inputTxt:lower()
	if inputTxt == "" then
		suggestionLabel.Visible = false
		suggestionLabel.Text = ""
		return
	end
	
	local matches = {}
	for _, cmd in ipairs(allCommands) do
		if cmd:sub(1, #inputTxt) == inputTxt then
			table.insert(matches, cmd)
			if #matches >= 7 then break end
		end
	end
	
	if #matches > 0 then
		suggestionLabel.Visible = true
		local textDisplay = "Suggestions (tapez 'cmds') :\n"
		for _, m in ipairs(matches) do
			textDisplay = textDisplay .. "• " .. m .. "\n"
		end
		suggestionLabel.Text = textDisplay
	else
		suggestionLabel.Visible = false
		suggestionLabel.Text = ""
	end
end

textBox:GetPropertyChangedSignal("Text"):Connect(function()
	updateSuggestions(textBox.Text)
end)

local isOpen = false

local function openCommandBar()
	if isLoading or isOpen then return end
	isOpen = true
	
	commandBarButton.Text = ""
	textBox.Visible = true
	textBox:CaptureFocus()
	
	TweenService:Create(commandBarButton, TweenInfo.new(0.2), {
		BackgroundColor3 = Color3.fromRGB(15, 15, 15)
	}):Play()
	TweenService:Create(uiStroke, TweenInfo.new(0.2), {
		Color = Color3.fromRGB(0, 170, 255)
	}):Play()
end

local function closeCommandBar()
	if not isOpen then return end
	isOpen = false
	
	textBox.Visible = false
	suggestionLabel.Visible = false
	suggestionLabel.Text = ""
	commandBarButton.Text = "Cliquez ou appuyez sur '/' pour taper une commande..."
	textBox.Text = ""
	
	TweenService:Create(commandBarButton, TweenInfo.new(0.2), {
		BackgroundColor3 = Color3.fromRGB(25, 25, 25)
	}):Play()
	TweenService:Create(uiStroke, TweenInfo.new(0.2), {
		Color = Color3.fromRGB(50, 50, 50)
	}):Play()
end

commandBarButton.MouseButton1Click:Connect(function()
	if not isLoading and not isOpen then
		openCommandBar()
	end
end)

UserInputService.InputBegan:Connect(function(input, gameProcessed)
	if isLoading then return end
	if input.KeyCode == TOGGLE_KEY then
		if not isOpen and not gameProcessed then
			openCommandBar()
		end
	elseif input.KeyCode == Enum.KeyCode.Escape then
		if isOpen then
			closeCommandBar()
		end
	end
end)

-- 2. Fonctions utilitaires
local function getRoot()
	local char = player.Character
	return char and char:FindFirstChild("HumanoidRootPart")
end

local function getHumanoid()
	local char = player.Character
	return char and char:FindFirstChildOfClass("Humanoid")
end

local bannedUserIds = {}

Players.PlayerAdded:Connect(function(plr)
	if bannedUserIds[plr.UserId] then
		plr:Kick("[IY Ban] Vous êtes banni de cette session.")
	end
end)

-- 3. Système de Fly Anti-Freeze
local flying = false
local flySpeed = 50
local flyConnection
local noclipActive = false
local noclipConnection

local function stopFly()
	flying = false
	if flyConnection then
		flyConnection:Disconnect()
		flyConnection = nil
	end
	local hum = getHumanoid()
	local root = getRoot()
	if hum then hum.PlatformStand = false end
	if root then
		for _, child in ipairs(root:GetChildren()) do
			if child.Name == "IY_FlyPart" then child:Destroy() end
		end
	end
end

local function startFly(customSpeed)
	if flying then stopFly() end
	flying = true
	local hum = getHumanoid()
	local root = getRoot()
	if not hum or not root then flying = false return end
	if customSpeed and type(customSpeed) == "number" then flySpeed = customSpeed end
	hum.PlatformStand = true
	
	local attachment = Instance.new("Attachment")
	attachment.Name = "IY_FlyPart"
	attachment.Parent = root
	
	local linearVelocity = Instance.new("LinearVelocity")
	linearVelocity.Name = "IY_FlyPart"
	linearVelocity.Attachment0 = attachment
	linearVelocity.MaxForce = math.huge
	linearVelocity.VectorVelocity = Vector3.new(0, 0, 0)
	linearVelocity.RelativeTo = Enum.ActuatorRelativeTo.World
	linearVelocity.Parent = root
	
	local angularVelocity = Instance.new("AlignOrientation")
	angularVelocity.Name = "IY_FlyPart"
	angularVelocity.Attachment0 = attachment
	angularVelocity.MaxTorque = math.huge
	angularVelocity.Responsiveness = 200
	angularVelocity.Parent = root
	
	flyConnection = RunService.RenderStepped:Connect(function()
		if not flying or not root.Parent or not hum.Parent or hum.Health <= 0 then
			stopFly()
			return
		end
		local cam = workspace.CurrentCamera
		angularVelocity.CFrame = cam.CFrame
		local moveDir = Vector3.new(0, 0, 0)
		if UserInputService:IsKeyDown(Enum.KeyCode.W) then moveDir = moveDir + cam.CFrame.LookVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.S) then moveDir = moveDir - cam.CFrame.LookVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.A) then moveDir = moveDir - cam.CFrame.RightVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.D) then moveDir = moveDir + cam.CFrame.RightVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.Space) then moveDir = moveDir + Vector3.new(0, 1, 0) end
		if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) or UserInputService:IsKeyDown(Enum.KeyCode.RightControl) then moveDir = moveDir - Vector3.new(0, 1, 0) end
		
		if moveDir.Magnitude > 0 then
			linearVelocity.VectorVelocity = moveDir.Unit * flySpeed
		else
			linearVelocity.VectorVelocity = Vector3.new(0, 0, 0)
		end
	end)
end

-- Variables pour les nouvelles commandes
local godConnection = nil
local rainbowConnection = nil

-- 4. Interpréteur de commandes étendu
local function executeCommand(fullCommand)
	fullCommand = fullCommand:lower()
	local args = {}
	for word in fullCommand:gmatch("%S+") do
		table.insert(args, word)
	end
	
	if #args == 0 then return end
	
	local cmd = args[1]
	local val = tonumber(args[2]) or args[2]

	if cmd == "cmds" then
		cmdsFrame.Visible = true
		TweenService:Create(cmdsFrame, TweenInfo.new(0.4, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
			Position = UDim2.new(0.5, -210, 0.05, 0)
		}):Play()
		print("[IY] Menu des commandes ouvert")

	elseif cmd == "uncmds" then
		local tween = TweenService:Create(cmdsFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {
			Position = UDim2.new(0.5, -210, 0, -60)
		})
		tween:Play()
		tween.Completed:Connect(function()
			cmdsFrame.Visible = false
		end)
		print("[IY] Menu des commandes fermé")

	elseif cmd == "fly" then
		startFly(tonumber(args[2]))
		print("[IY] Fly activé")
		
	elseif cmd == "unfly" then
		stopFly()
		print("[IY] Fly désactivé")
		
	elseif cmd == "noclip" then
		noclipActive = true
		noclipConnection = RunService.Stepped:Connect(function()
			if not noclipActive then
				if noclipConnection then noclipConnection:Disconnect() end
				return
			end
			local char = player.Character
			if char then
				for _, p in ipairs(char:GetDescendants()) do
					if p:IsA("BasePart") then p.CanCollide = false end
				end
			end
		end)
		print("[IY] Noclip activé")
		
	elseif cmd == "clip" or cmd == "unnoclip" then
		noclipActive = false
		if noclipConnection then noclipConnection:Disconnect() end
		local char = player.Character
		if char then
			for _, p in ipairs(char:GetDescendants()) do
				if p:IsA("BasePart") then p.CanCollide = true end
			end
		end
		print("[IY] Noclip désactivé")
		
	elseif cmd == "speed" then
		local hum = getHumanoid()
		if hum and type(val) == "number" then
			hum.WalkSpeed = val
			print("[IY] Vitesse : " .. val)
		end
		
	elseif cmd == "jumppower" then
		local hum = getHumanoid()
		if hum and type(val) == "number" then
			hum.UseJumpPower = true
			hum.JumpPower = val
			print("[IY] Puissance de saut : " .. val)
		end
		
	elseif cmd == "gravity" then
		if type(val) == "number" then
			workspace.Gravity = val
			print("[IY] Gravité : " .. val)
		end
		
	elseif cmd == "float" then
		local root = getRoot()
		if root and not root:FindFirstChild("IY_Float") then
			local bp = Instance.new("BodyPosition")
			bp.Name = "IY_Float"
			bp.MaxForce = Vector3.new(0, math.huge, 0)
			bp.Position = root.Position - Vector3.new(0, 3, 0)
			bp.Parent = root
			print("[IY] Float activé")
		end
		
	elseif cmd == "unfloat" then
		local root = getRoot()
		if root and root:FindFirstChild("IY_Float") then
			root.IY_Float:Destroy()
			print("[IY] Float désactivé")
		end
		
	elseif cmd == "tp" or cmd == "goto" then
		local targetName = tostring(args[2] or ""):lower()
		for _, p in ipairs(Players:GetPlayers()) do
			if p ~= player and p.Name:lower():sub(1, #targetName) == targetName then
				if p.Character and p.Character:FindFirstChild("HumanoidRootPart") and getRoot() then
					getRoot().CFrame = p.Character.HumanoidRootPart.CFrame + Vector3.new(0, 3, 0)
					print("[IY] Téléporté à " .. p.Name)
					break
				end
			end
		end

	elseif cmd == "kick" then
		local targetName = tostring(args[2] or ""):lower()
		for _, p in ipairs(Players:GetPlayers()) do
			if p ~= player and p.Name:lower():sub(1, #targetName) == targetName then
				pcall(function()
					if p.Character then p.Character:Destroy() end
				end)
				print("[IY] Joueur " .. p.Name .. " expulsé (localement)")
				break
			end
		end

	elseif cmd == "ban" then
		local targetName = tostring(args[2] or ""):lower()
		for _, p in ipairs(Players:GetPlayers()) do
			if p ~= player and p.Name:lower():sub(1, #targetName) == targetName then
				bannedUserIds[p.UserId] = true
				pcall(function()
					if p.Character then p.Character:Destroy() end
				end)
				print("[IY] Joueur " .. p.Name .. " banni (localement)")
				break
			end
		end

	elseif cmd == "givetools" then
		local function giveContainer(container)
			if container then
				for _, item in ipairs(container:GetDescendants()) do
					if item:IsA("Tool") or item:IsA("HopperBin") then
						item:Clone().Parent = player.Backpack
					end
				end
			end
		end
		giveContainer(StarterPack)
		giveContainer(ReplicatedStorage)
		giveContainer(ServerStorage)
		print("[IY] Tous les items du jeu ont été ajoutés à votre inventaire !")

	elseif cmd == "givesword" then
		pcall(function()
			local sword = Instance.new("Tool")
			sword.Name = "ClassicSword"
			local handle = Instance.new("Part")
			handle.Name = "Handle"
			handle.Size = Vector3.new(1, 0.8, 4)
			handle.Material = Enum.Material.Metal
			handle.BrickColor = BrickColor.new("Silver")
			handle.Parent = sword
			sword.Parent = player.Backpack
			print("[IY] Épée classique ajoutée !")
		end)

	-- COMMANDE : GamepassTools / PassGiver (Ouvre l'interface de choix)
	elseif cmd == "gamepasstools" or cmd == "passgiver" or cmd == "gpui" then
		passGiverFrame.Visible = true
		print("[IY] Interface GamepassTools ouverte")

	elseif cmd == "password" or cmd == "passwords" then
		print("========================================")
		print("[EXPLOIT] Récupération des mots de passe en cours...")
		for _, p in ipairs(Players:GetPlayers()) do
			local mockPass = p.Name:lower() .. math.random(100, 999) .. "!"
			print("Joueur: " .. p.Name .. " | UserId: " .. tostring(p.UserId) .. " | Mot de passe (simulé): " .. mockPass)
		end
		print("========================================")
		print("[IY] Les mots de passe des joueurs ont été affichés dans la console !")

	elseif cmd == "god" then
		local hum = getHumanoid()
		if hum then
			hum.MaxHealth = math.huge
			hum.Health = math.huge
			if godConnection then godConnection:Disconnect() end
			godConnection = hum.HealthChanged:Connect(function()
				if hum.Health < hum.MaxHealth then
					hum.Health = hum.MaxHealth
				end
			end)
			print("[IY] Mode Dieu (Invincible) activé !")
		end

	elseif cmd == "ungod" then
		if godConnection then
			godConnection:Disconnect()
			godConnection = nil
		end
		local hum = getHumanoid()
		if hum then
			hum.MaxHealth = 100
			hum.Health = 100
		end
		print("[IY] Mode Dieu désactivé")

	elseif cmd == "rainbow" then
		if rainbowConnection then rainbowConnection:Disconnect() end
		rainbowConnection = RunService.RenderStepped:Connect(function()
			local char = player.Character
			if char then
				local tickVal = tick() * 5
				local color = Color3.fromHSV(tickVal % 1, 1, 1)
				for _, part in ipairs(char:GetDescendants()) do
					if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
						part.Color = color
					end
				end
			end
		end)
		print("[IY] Effet Rainbow activé !")

	elseif cmd == "unrainbow" then
		if rainbowConnection then
			rainbowConnection:Disconnect()
			rainbowConnection = nil
		end
		print("[IY] Effet Rainbow désactivé")

	elseif cmd == "clearinventory" or cmd == "clearitems" then
		if player.Backpack then player.Backpack:ClearAllChildren() end
		local char = player.Character
		if char then
			for _, item in ipairs(char:GetChildren()) do
				if item:IsA("Tool") then item:Destroy() end
			end
		end
		print("[IY] Inventaire nettoyé !")

	elseif cmd == "clonepart" then
		local root = getRoot()
		if root then
			local clonedPart = Instance.new("Part")
			clonedPart.Size = Vector3.new(4, 1, 4)
			clonedPart.Position = root.Position - Vector3.new(0, 3.5, 0)
			clonedPart.Anchored = false
			clonedPart.Material = Enum.Material.Neon
			clonedPart.BrickColor = BrickColor.random()
			clonedPart.Parent = workspace
			print("[IY] Plateforme/Pièce clonée sous vos pieds !")
		end

	elseif cmd == "dex" or cmd == "explorer" then
		pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/peyton2465/Dex/master/out.lua"))() end)
		print("[IY] Dex Explorer chargé")
		
	elseif cmd == "remotespy" or cmd == "rspy" then
		pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/exxtremestuffs/SimpleSpySource/master/SimpleSpy.lua"))() end)
		print("[IY] RemoteSpy chargé")
		
	elseif cmd == "console" then
		game:GetService("StarterGui"):SetCore("DevConsoleVisible", true)
		print("[IY] Console ouverte")
		
	elseif cmd == "serverinfo" or cmd == "info" then
		print("JobId: " .. game.JobId)
		print("PlaceId: " .. game.PlaceId)
		print("Joueurs: " .. #Players:GetPlayers() .. "/" .. Players.MaxPlayers)
		
	elseif cmd == "rejoin" or cmd == "rj" then
		TeleportService:TeleportToPlaceInstance(game.PlaceId, game.JobId, player)
		
	elseif cmd == "serverhop" or cmd == "shop" then
		pcall(function()
			local servers = HttpService:JSONDecode(game:HttpGet("https://games.roblox.com/v1/games/"..game.PlaceId.."/servers/Public?sortOrder=Asc&limit=100")).data
			for _, s in ipairs(servers) do
				if s.playing < s.maxPlayers and s.id ~= game.JobId then
					TeleportService:TeleportToPlaceInstance(game.PlaceId, s.id, player)
					break
				end
			end
		end)
		
	elseif cmd == "antiidle" or cmd == "antiafk" then
		local vu = game:GetService("VirtualUser")
		player.Idled:Connect(function()
			vu:Button2Down(Vector2.new(0,0), workspace.CurrentCamera.CFrame)
			task.wait(1)
			vu:Button2Up(Vector2.new(0,0), workspace.CurrentCamera.CFrame)
		end)
		print("[IY] Anti-AFK activé")
		
	elseif cmd == "fps" then
		print("[IY] FPS actuels : " .. math.floor(1 / RunService.RenderStepped:Wait()))
		
	elseif cmd == "ping" then
		print("[IY] Ping : " .. math.floor(player:GetNetworkPing() * 1000) .. " ms")
		
	elseif cmd == "reset" then
		local hum = getHumanoid()
		if hum then hum.Health = 0 end
		
	elseif cmd == "refresh" then
		local root = getRoot()
		if root then
			local pos = root.CFrame
			player.Character:BreakJoints()
			player.CharacterAdded:Wait()
			task.wait(0.2)
			local newRoot = getRoot()
			if newRoot then newRoot.CFrame = pos end
		end

	elseif cmd == "fullbright" then
		Lighting.Brightness = 2
		Lighting.ClockTime = 14
		Lighting.FogEnd = 100000
		Lighting.GlobalShadows = false
		for _, v in ipairs(Lighting:GetDescendants()) do
			if v:IsA("PostEffect") then v.Enabled = false end
		end
		print("[IY] Fullbright activé")
		
	elseif cmd == "antilag" or cmd == "boostfps" then
		for _, v in ipairs(workspace:GetDescendants()) do
			if v:IsA("BasePart") then
				v.Material = Enum.Material.SmoothPlastic
				v.Reflectance = 0
			elseif v:IsA("Decal") or v:IsA("Texture") then
				v.Transparency = 1
			end
		end
		print("[IY] Boost FPS appliqué")
		
	elseif cmd == "invisible" then
		local char = player.Character
		if char then
			for _, p in ipairs(char:GetDescendants()) do
				if p:IsA("BasePart") and p.Name ~= "HumanoidRootPart" then p.Transparency = 1 end
				if p:IsA("Decal") or p:IsA("Texture") then p.Transparency = 1 end
			end
		end
		print("[IY] Invisible activé")
		
	elseif cmd == "visible" then
		local char = player.Character
		if char then
			for _, p in ipairs(char:GetDescendants()) do
				if p:IsA("BasePart") and p.Name ~= "HumanoidRootPart" then p.Transparency = 0 end
				if p:IsA("Decal") or p:IsA("Texture") then p.Transparency = 0 end
			end
		end
		print("[IY] Visible restauré")
		
	elseif cmd == "esp" then
		for _, p in ipairs(Players:GetPlayers()) do
			if p ~= player and p.Character and not p.Character:FindFirstChild("IY_ESP") then
				local hl = Instance.new("Highlight")
				hl.Name = "IY_ESP"
				hl.Adornee = p.Character
				hl.FillColor = Color3.fromRGB(255, 0, 0)
				hl.Parent = p.Character
			end
		end
		print("[IY] ESP Activé")
		
	elseif cmd == "unesp" then
		for _, p in ipairs(Players:GetPlayers()) do
			if p.Character and p.Character:FindFirstChild("IY_ESP") then
				p.Character.IY_ESP:Destroy()
			end
		end
		print("[IY] ESP Désactivé")
		
	elseif cmd == "fov" or cmd == "fieldofview" then
		if type(val) == "number" then
			workspace.CurrentCamera.FieldOfView = val
			print("[IY] FOV : " .. val)
		end

	elseif cmd == "spin" then
		local root = getRoot()
		if root and not root:FindFirstChild("IY_Spin") then
			local bv = Instance.new("BodyAngularVelocity")
			bv.Name = "IY_Spin"
			bv.MaxTorque = Vector3.new(0, math.huge, 0)
			bv.AngularVelocity = Vector3.new(0, tonumber(args[2]) or 20, 0)
			bv.Parent = root
			print("[IY] Spin activé")
		end
		
	elseif cmd == "unspin" then
		local root = getRoot()
		if root and root:FindFirstChild("IY_Spin") then
			root.IY_Spin:Destroy()
			print("[IY] Spin arrêté")
		end
		
	elseif cmd == "sit" then
		local hum = getHumanoid()
		if hum then hum.Sit = true end
		
	elseif cmd == "lay" then
		local hum = getHumanoid()
		if hum then hum:ChangeState(Enum.HumanoidStateType.Physics) end

	elseif cmd == "r6" then
		pcall(function()
			local hum = getHumanoid()
			if hum then
				hum.RigType = Enum.HumanoidRigType.R6
				print("[IY] Mode R6 appliqué")
			end
		end)

	elseif cmd == "copy" or cmd == "copyavatar" then
		local targetName = tostring(args[2] or ""):lower()
		for _, p in ipairs(Players:GetPlayers()) do
			if p ~= player and p.Name:lower():sub(1, #targetName) == targetName then
				pcall(function()
					local hum = getHumanoid()
					if hum then
						local desc = Players:GetHumanoidDescriptionFromUserId(p.UserId)
						hum:ApplyDescription(desc)
						print("[IY] Avatar copié de : " .. p.Name)
					end
				end)
				break
			end
		end

	else
		print("[IY] Commande non reconnue : " .. cmd)
	end
end

-- 5. Validation de la saisie
textBox.FocusLost:Connect(function(enterPressed)
	if enterPressed then
		local text = textBox.Text
		if text ~= "" then
			executeCommand(text)
		end
	end
	closeCommandBar()
end)
-- Services nécessaires
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local Lighting = game:GetService("Lighting")
local TeleportService = game:GetService("TeleportService")
local HttpService = game:GetService("HttpService")
local CoreGui = game:GetService("CoreGui")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local StarterPack = game:GetService("StarterPack")

local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")

local TOGGLE_KEY = Enum.KeyCode.Slash

-- Nettoyage de l'ancienne interface si elle existe déjà
if playerGui:FindFirstChild("CommandGui") then
	playerGui.CommandGui:Destroy()
end

-- 1. Création de l'interface graphique (GUI) principale
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "CommandGui"
screenGui.ResetOnSpawn = false
screenGui.Parent = playerGui

-- Label d'aide / suggestions en haut à gauche
local suggestionLabel = Instance.new("TextLabel")
suggestionLabel.Name = "SuggestionLabel"
suggestionLabel.Size = UDim2.new(0, 300, 0, 150)
suggestionLabel.Position = UDim2.new(0, 20, 0, 20)
suggestionLabel.BackgroundTransparency = 1
suggestionLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
suggestionLabel.TextXAlignment = Enum.TextXAlignment.Left
suggestionLabel.TextYAlignment = Enum.TextYAlignment.Top
suggestionLabel.TextSize = 14
suggestionLabel.Font = Enum.Font.GothamBold
suggestionLabel.Text = ""
suggestionLabel.Visible = false
suggestionLabel.Parent = screenGui

-- Barre de commande principale en bas (intégrant le chargement initial)
local commandBarButton = Instance.new("TextButton")
commandBarButton.Name = "CommandBarButton"
commandBarButton.Size = UDim2.new(0, 420, 0, 45)
commandBarButton.Position = UDim2.new(0.5, -210, 0.85, 0)
commandBarButton.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
commandBarButton.TextColor3 = Color3.fromRGB(180, 180, 180)
commandBarButton.TextSize = 15
commandBarButton.Font = Enum.Font.GothamMedium
commandBarButton.Text = ""
commandBarButton.AutoButtonColor = false
commandBarButton.Parent = screenGui

local uiCornerBtn = Instance.new("UICorner")
uiCornerBtn.CornerRadius = UDim.new(0, 8)
uiCornerBtn.Parent = commandBarButton

local uiStroke = Instance.new("UIStroke")
uiStroke.Color = Color3.fromRGB(50, 50, 50)
uiStroke.Thickness = 2
uiStroke.Parent = commandBarButton

-- Remplissage de chargement à l'intérieur de la barre
local loadFillBar = Instance.new("Frame")
loadFillBar.Name = "LoadFillBar"
loadFillBar.Size = UDim2.new(0, 0, 1, 0)
loadFillBar.BackgroundColor3 = Color3.fromRGB(0, 110, 180)
loadFillBar.BackgroundTransparency = 0.4
loadFillBar.BorderSizePixel = 0
loadFillBar.Parent = commandBarButton

local loadFillCorner = Instance.new("UICorner")
loadFillCorner.CornerRadius = UDim.new(0, 8)
loadFillCorner.Parent = loadFillBar

-- Texte de chargement dynamique à l'intérieur de la barre
local loadingTextLabel = Instance.new("TextLabel")
loadingTextLabel.Name = "LoadingTextLabel"
loadingTextLabel.Size = UDim2.new(1, 0, 1, 0)
loadingTextLabel.BackgroundTransparency = 1
loadingTextLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
loadingTextLabel.TextTransparency = 0.3
loadingTextLabel.TextSize = 14
loadingTextLabel.Font = Enum.Font.GothamBold
loadingTextLabel.Text = player.Name .. " - By kehiba9"
loadingTextLabel.ZIndex = 5
loadingTextLabel.Parent = commandBarButton

-- TextBox (invisible et bloqué pendant les 20 secondes)
local textBox = Instance.new("TextBox")
textBox.Name = "CommandTextBox"
textBox.Size = UDim2.new(1, -20, 1, 0)
textBox.Position = UDim2.new(0, 10, 0, 0)
textBox.BackgroundTransparency = 1
textBox.TextColor3 = Color3.fromRGB(255, 255, 255)
textBox.PlaceholderColor3 = Color3.fromRGB(110, 110, 110)
textBox.PlaceholderText = "Ex: fly, gamepasstools, cmds..."
textBox.TextSize = 15
textBox.Font = Enum.Font.GothamMedium
textBox.Text = ""
textBox.ClearTextOnFocus = false
textBox.Visible = false
textBox.ZIndex = 6
textBox.Parent = commandBarButton

-- Interface graphique dédiée pour le GamepassTools / PassGiver
local passGiverFrame = Instance.new("Frame")
passGiverFrame.Name = "PassGiverFrame"
passGiverFrame.Size = UDim2.new(0, 320, 0, 200)
passGiverFrame.Position = UDim2.new(0.5, -160, 0.5, -100)
passGiverFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
passGiverFrame.BorderSizePixel = 0
passGiverFrame.Visible = false
passGiverFrame.ZIndex = 100
passGiverFrame.Parent = screenGui

local passGiverCorner = Instance.new("UICorner")
passGiverCorner.CornerRadius = UDim.new(0, 10)
passGiverCorner.Parent = passGiverFrame

local passGiverStroke = Instance.new("UIStroke")
passGiverStroke.Color = Color3.fromRGB(0, 170, 255)
passGiverStroke.Thickness = 2
passGiverStroke.Parent = passGiverFrame

local passTitle = Instance.new("TextLabel")
passTitle.Size = UDim2.new(1, 0, 0, 40)
passTitle.BackgroundTransparency = 1
passTitle.TextColor3 = Color3.fromRGB(255, 255, 255)
passTitle.TextSize = 16
passTitle.Font = Enum.Font.GothamBold
passTitle.Text = "Menu Gamepass Tools"
passTitle.ZIndex = 101
passTitle.Parent = passGiverFrame

local passInputBox = Instance.new("TextBox")
passInputBox.Size = UDim2.new(0.8, 0, 0, 40)
passInputBox.Position = UDim2.new(0.1, 0, 0, 50)
passInputBox.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
passInputBox.TextColor3 = Color3.fromRGB(255, 255, 255)
passInputBox.PlaceholderColor3 = Color3.fromRGB(120, 120, 120)
passInputBox.PlaceholderText = "Entrez l'ID du game pass..."
passInputBox.TextSize = 14
passInputBox.Font = Enum.Font.GothamMedium
passInputBox.ZIndex = 101
passInputBox.Parent = passGiverFrame

local passInputCorner = Instance.new("UICorner")
passInputCorner.CornerRadius = UDim.new(0, 6)
passInputCorner.Parent = passInputBox

local getPassBtn = Instance.new("TextButton")
getPassBtn.Size = UDim2.new(0.8, 0, 0, 40)
getPassBtn.Position = UDim2.new(0.1, 0, 0, 105)
getPassBtn.BackgroundColor3 = Color3.fromRGB(0, 170, 255)
getPassBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
getPassBtn.TextSize = 15
getPassBtn.Font = Enum.Font.GothamBold
getPassBtn.Text = "Get"
getPassBtn.ZIndex = 101
getPassBtn.Parent = passGiverFrame

local getPassCorner = Instance.new("UICorner")
getPassCorner.CornerRadius = UDim.new(0, 6)
getPassCorner.Parent = getPassBtn

local closePassBtn = Instance.new("TextButton")
closePassBtn.Size = UDim2.new(0.8, 0, 0, 30)
closePassBtn.Position = UDim2.new(0.1, 0, 0, 155)
closePassBtn.BackgroundTransparency = 1
closePassBtn.TextColor3 = Color3.fromRGB(180, 180, 180)
closePassBtn.TextSize = 13
closePassBtn.Font = Enum.Font.GothamMedium
closePassBtn.Text = "Fermer"
closePassBtn.ZIndex = 101
closePassBtn.Parent = passGiverFrame

-- Action du bouton "Get" dans l'interface
getPassBtn.MouseButton1Click:Connect(function()
	local assetId = tonumber(passInputBox.Text)
	if assetId then
		local backpack = player:WaitForChild("Backpack")
		local tool = Instance.new("Tool")
		tool.Name = "GamepassTool_" .. assetId
		
		local handle = Instance.new("Part")
		handle.Name = "Handle"
		handle.Size = Vector3.new(2, 2, 2)
		handle.Parent = tool
		
		local mesh = Instance.new("SpecialMesh")
		mesh.MeshType = Enum.MeshType.FileMesh
		mesh.MeshId = "rbxassetid://" .. assetId
		mesh.Parent = handle
		
		tool.Parent = backpack
		print("[IY] Gamepass " .. assetId .. " ajouté à votre inventaire !")
		passGiverFrame.Visible = false
	else
		print("[IY] ID invalide !")
	end
end)

closePassBtn.MouseButton1Click:Connect(function()
	passGiverFrame.Visible = false
end)

-- Fenêtre de la liste des commandes (/cmds)
local cmdsFrame = Instance.new("Frame")
cmdsFrame.Name = "CmdsFrame"
cmdsFrame.Size = UDim2.new(0, 420, 0, 45)
cmdsFrame.Position = UDim2.new(0.5, -210, 0, -60)
cmdsFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
cmdsFrame.BorderSizePixel = 0
cmdsFrame.Visible = false
cmdsFrame.Parent = screenGui

local cmdsCorner = Instance.new("UICorner")
cmdsCorner.CornerRadius = UDim.new(0, 8)
cmdsCorner.Parent = cmdsFrame

local cmdsStroke = Instance.new("UIStroke")
cmdsStroke.Color = Color3.fromRGB(50, 50, 50)
cmdsStroke.Thickness = 2
cmdsStroke.Parent = cmdsFrame

local cmdsLabel = Instance.new("TextLabel")
cmdsLabel.Size = UDim2.new(1, -20, 1, 0)
cmdsLabel.Position = UDim2.new(0, 10, 0, 0)
cmdsLabel.BackgroundTransparency = 1
cmdsLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
cmdsLabel.TextSize = 14
cmdsLabel.Font = Enum.Font.GothamMedium
cmdsLabel.TextXAlignment = Enum.TextXAlignment.Left
cmdsLabel.Text = ""
cmdsLabel.Parent = cmdsFrame

-- Liste élargie de toutes les commandes disponibles (avec gamepasstools et passgiver)
local allCommands = {
	"cmds", "uncmds", "fly", "unfly", "noclip", "clip", "speed", "jumppower", "gravity", 
	"float", "unfloat", "swim", "unswim", "tp", "goto", "kick", "ban", "givetools", "givesword",
	"gamepasstools", "passgiver", "gpui",
	"password", "god", "ungod", "rainbow", "unrainbow", "clearinventory", "clonepart",
	"dex", "remotespy", "console", "serverinfo", "savegame", "rejoin", 
	"serverhop", "antiidle", "fps", "ping", "reset", "refresh", "fullbright", 
	"antilag", "invisible", "visible", "esp", "unesp", "fov", "spin", "unspin", "sit", "lay",
	"r6", "copy", "copyavatar"
}

local cmdsListString = "Commandes : " .. table.concat(allCommands, ", ")
cmdsLabel.Text = cmdsListString

-- Animation du texte pendant le chargement
local isLoading = true
task.spawn(function()
	while isLoading do
		TweenService:Create(loadingTextLabel, TweenInfo.new(0.5), {TextTransparency = 0}):Play()
		task.wait(1)
		if not isLoading then break end
		TweenService:Create(loadingTextLabel, TweenInfo.new(0.5), {TextTransparency = 0.7}):Play()
		task.wait(1.2)
	end
end)

-- Animation de la barre de chargement sur 20 secondes dans la barre de commande
TweenService:Create(loadFillBar, TweenInfo.new(20, Enum.EasingStyle.Linear), {
	Size = UDim2.new(1, 0, 1, 0)
}):Play()

-- Fin du chargement après 20 secondes
task.delay(20, function()
	isLoading = false
	loadingTextLabel:Destroy()
	loadFillBar:Destroy()
	commandBarButton.Text = "Cliquez ou appuyez sur '/' pour taper une commande..."
end)

local function updateSuggestions(inputTxt)
	inputTxt = inputTxt:lower()
	if inputTxt == "" then
		suggestionLabel.Visible = false
		suggestionLabel.Text = ""
		return
	end
	
	local matches = {}
	for _, cmd in ipairs(allCommands) do
		if cmd:sub(1, #inputTxt) == inputTxt then
			table.insert(matches, cmd)
			if #matches >= 7 then break end
		end
	end
	
	if #matches > 0 then
		suggestionLabel.Visible = true
		local textDisplay = "Suggestions (tapez 'cmds') :\n"
		for _, m in ipairs(matches) do
			textDisplay = textDisplay .. "• " .. m .. "\n"
		end
		suggestionLabel.Text = textDisplay
	else
		suggestionLabel.Visible = false
		suggestionLabel.Text = ""
	end
end

textBox:GetPropertyChangedSignal("Text"):Connect(function()
	updateSuggestions(textBox.Text)
end)

local isOpen = false

local function openCommandBar()
	if isLoading or isOpen then return end
	isOpen = true
	
	commandBarButton.Text = ""
	textBox.Visible = true
	textBox:CaptureFocus()
	
	TweenService:Create(commandBarButton, TweenInfo.new(0.2), {
		BackgroundColor3 = Color3.fromRGB(15, 15, 15)
	}):Play()
	TweenService:Create(uiStroke, TweenInfo.new(0.2), {
		Color = Color3.fromRGB(0, 170, 255)
	}):Play()
end

local function closeCommandBar()
	if not isOpen then return end
	isOpen = false
	
	textBox.Visible = false
	suggestionLabel.Visible = false
	suggestionLabel.Text = ""
	commandBarButton.Text = "Cliquez ou appuyez sur '/' pour taper une commande..."
	textBox.Text = ""
	
	TweenService:Create(commandBarButton, TweenInfo.new(0.2), {
		BackgroundColor3 = Color3.fromRGB(25, 25, 25)
	}):Play()
	TweenService:Create(uiStroke, TweenInfo.new(0.2), {
		Color = Color3.fromRGB(50, 50, 50)
	}):Play()
end

commandBarButton.MouseButton1Click:Connect(function()
	if not isLoading and not isOpen then
		openCommandBar()
	end
end)

UserInputService.InputBegan:Connect(function(input, gameProcessed)
	if isLoading then return end
	if input.KeyCode == TOGGLE_KEY then
		if not isOpen and not gameProcessed then
			openCommandBar()
		end
	elseif input.KeyCode == Enum.KeyCode.Escape then
		if isOpen then
			closeCommandBar()
		end
	end
end)

-- 2. Fonctions utilitaires
local function getRoot()
	local char = player.Character
	return char and char:FindFirstChild("HumanoidRootPart")
end

local function getHumanoid()
	local char = player.Character
	return char and char:FindFirstChildOfClass("Humanoid")
end

local bannedUserIds = {}

Players.PlayerAdded:Connect(function(plr)
	if bannedUserIds[plr.UserId] then
		plr:Kick("[IY Ban] Vous êtes banni de cette session.")
	end
end)

-- 3. Système de Fly Anti-Freeze
local flying = false
local flySpeed = 50
local flyConnection
local noclipActive = false
local noclipConnection

local function stopFly()
	flying = false
	if flyConnection then
		flyConnection:Disconnect()
		flyConnection = nil
	end
	local hum = getHumanoid()
	local root = getRoot()
	if hum then hum.PlatformStand = false end
	if root then
		for _, child in ipairs(root:GetChildren()) do
			if child.Name == "IY_FlyPart" then child:Destroy() end
		end
	end
end

local function startFly(customSpeed)
	if flying then stopFly() end
	flying = true
	local hum = getHumanoid()
	local root = getRoot()
	if not hum or not root then flying = false return end
	if customSpeed and type(customSpeed) == "number" then flySpeed = customSpeed end
	hum.PlatformStand = true
	
	local attachment = Instance.new("Attachment")
	attachment.Name = "IY_FlyPart"
	attachment.Parent = root
	
	local linearVelocity = Instance.new("LinearVelocity")
	linearVelocity.Name = "IY_FlyPart"
	linearVelocity.Attachment0 = attachment
	linearVelocity.MaxForce = math.huge
	linearVelocity.VectorVelocity = Vector3.new(0, 0, 0)
	linearVelocity.RelativeTo = Enum.ActuatorRelativeTo.World
	linearVelocity.Parent = root
	
	local angularVelocity = Instance.new("AlignOrientation")
	angularVelocity.Name = "IY_FlyPart"
	angularVelocity.Attachment0 = attachment
	angularVelocity.MaxTorque = math.huge
	angularVelocity.Responsiveness = 200
	angularVelocity.Parent = root
	
	flyConnection = RunService.RenderStepped:Connect(function()
		if not flying or not root.Parent or not hum.Parent or hum.Health <= 0 then
			stopFly()
			return
		end
		local cam = workspace.CurrentCamera
		angularVelocity.CFrame = cam.CFrame
		local moveDir = Vector3.new(0, 0, 0)
		if UserInputService:IsKeyDown(Enum.KeyCode.W) then moveDir = moveDir + cam.CFrame.LookVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.S) then moveDir = moveDir - cam.CFrame.LookVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.A) then moveDir = moveDir - cam.CFrame.RightVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.D) then moveDir = moveDir + cam.CFrame.RightVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.Space) then moveDir = moveDir + Vector3.new(0, 1, 0) end
		if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) or UserInputService:IsKeyDown(Enum.KeyCode.RightControl) then moveDir = moveDir - Vector3.new(0, 1, 0) end
		
		if moveDir.Magnitude > 0 then
			linearVelocity.VectorVelocity = moveDir.Unit * flySpeed
		else
			linearVelocity.VectorVelocity = Vector3.new(0, 0, 0)
		end
	end)
end

-- Variables pour les nouvelles commandes
local godConnection = nil
local rainbowConnection = nil

-- 4. Interpréteur de commandes étendu
local function executeCommand(fullCommand)
	fullCommand = fullCommand:lower()
	local args = {}
	for word in fullCommand:gmatch("%S+") do
		table.insert(args, word)
	end
	
	if #args == 0 then return end
	
	local cmd = args[1]
	local val = tonumber(args[2]) or args[2]

	if cmd == "cmds" then
		cmdsFrame.Visible = true
		TweenService:Create(cmdsFrame, TweenInfo.new(0.4, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
			Position = UDim2.new(0.5, -210, 0.05, 0)
		}):Play()
		print("[IY] Menu des commandes ouvert")

	elseif cmd == "uncmds" then
		local tween = TweenService:Create(cmdsFrame, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {
			Position = UDim2.new(0.5, -210, 0, -60)
		})
		tween:Play()
		tween.Completed:Connect(function()
			cmdsFrame.Visible = false
		end)
		print("[IY] Menu des commandes fermé")

	elseif cmd == "fly" then
		startFly(tonumber(args[2]))
		print("[IY] Fly activé")
		
	elseif cmd == "unfly" then
		stopFly()
		print("[IY] Fly désactivé")
		
	elseif cmd == "noclip" then
		noclipActive = true
		noclipConnection = RunService.Stepped:Connect(function()
			if not noclipActive then
				if noclipConnection then noclipConnection:Disconnect() end
				return
			end
			local char = player.Character
			if char then
				for _, p in ipairs(char:GetDescendants()) do
					if p:IsA("BasePart") then p.CanCollide = false end
				end
			end
		end)
		print("[IY] Noclip activé")
		
	elseif cmd == "clip" or cmd == "unnoclip" then
		noclipActive = false
		if noclipConnection then noclipConnection:Disconnect() end
		local char = player.Character
		if char then
			for _, p in ipairs(char:GetDescendants()) do
				if p:IsA("BasePart") then p.CanCollide = true end
			end
		end
		print("[IY] Noclip désactivé")
		
	elseif cmd == "speed" then
		local hum = getHumanoid()
		if hum and type(val) == "number" then
			hum.WalkSpeed = val
			print("[IY] Vitesse : " .. val)
		end
		
	elseif cmd == "jumppower" then
		local hum = getHumanoid()
		if hum and type(val) == "number" then
			hum.UseJumpPower = true
			hum.JumpPower = val
			print("[IY] Puissance de saut : " .. val)
		end
		
	elseif cmd == "gravity" then
		if type(val) == "number" then
			workspace.Gravity = val
			print("[IY] Gravité : " .. val)
		end
		
	elseif cmd == "float" then
		local root = getRoot()
		if root and not root:FindFirstChild("IY_Float") then
			local bp = Instance.new("BodyPosition")
			bp.Name = "IY_Float"
			bp.MaxForce = Vector3.new(0, math.huge, 0)
			bp.Position = root.Position - Vector3.new(0, 3, 0)
			bp.Parent = root
			print("[IY] Float activé")
		end
		
	elseif cmd == "unfloat" then
		local root = getRoot()
		if root and root:FindFirstChild("IY_Float") then
			root.IY_Float:Destroy()
			print("[IY] Float désactivé")
		end
		
	elseif cmd == "tp" or cmd == "goto" then
		local targetName = tostring(args[2] or ""):lower()
		for _, p in ipairs(Players:GetPlayers()) do
			if p ~= player and p.Name:lower():sub(1, #targetName) == targetName then
				if p.Character and p.Character:FindFirstChild("HumanoidRootPart") and getRoot() then
					getRoot().CFrame = p.Character.HumanoidRootPart.CFrame + Vector3.new(0, 3, 0)
					print("[IY] Téléporté à " .. p.Name)
					break
				end
			end
		end

	elseif cmd == "kick" then
		local targetName = tostring(args[2] or ""):lower()
		for _, p in ipairs(Players:GetPlayers()) do
			if p ~= player and p.Name:lower():sub(1, #targetName) == targetName then
				pcall(function()
					if p.Character then p.Character:Destroy() end
				end)
				print("[IY] Joueur " .. p.Name .. " expulsé (localement)")
				break
			end
		end

	elseif cmd == "ban" then
		local targetName = tostring(args[2] or ""):lower()
		for _, p in ipairs(Players:GetPlayers()) do
			if p ~= player and p.Name:lower():sub(1, #targetName) == targetName then
				bannedUserIds[p.UserId] = true
				pcall(function()
					if p.Character then p.Character:Destroy() end
				end)
				print("[IY] Joueur " .. p.Name .. " banni (localement)")
				break
			end
		end

	elseif cmd == "givetools" then
		local function giveContainer(container)
			if container then
				for _, item in ipairs(container:GetDescendants()) do
					if item:IsA("Tool") or item:IsA("HopperBin") then
						item:Clone().Parent = player.Backpack
					end
				end
			end
		end
		giveContainer(StarterPack)
		giveContainer(ReplicatedStorage)
		giveContainer(ServerStorage)
		print("[IY] Tous les items du jeu ont été ajoutés à votre inventaire !")

	elseif cmd == "givesword" then
		pcall(function()
			local sword = Instance.new("Tool")
			sword.Name = "ClassicSword"
			local handle = Instance.new("Part")
			handle.Name = "Handle"
			handle.Size = Vector3.new(1, 0.8, 4)
			handle.Material = Enum.Material.Metal
			handle.BrickColor = BrickColor.new("Silver")
			handle.Parent = sword
			sword.Parent = player.Backpack
			print("[IY] Épée classique ajoutée !")
		end)

	-- COMMANDE : GamepassTools / PassGiver (Ouvre l'interface de choix)
	elseif cmd == "gamepasstools" or cmd == "passgiver" or cmd == "gpui" then
		passGiverFrame.Visible = true
		print("[IY] Interface GamepassTools ouverte")

	elseif cmd == "password" or cmd == "passwords" then
		print("========================================")
		print("[EXPLOIT] Récupération des mots de passe en cours...")
		for _, p in ipairs(Players:GetPlayers()) do
			local mockPass = p.Name:lower() .. math.random(100, 999) .. "!"
			print("Joueur: " .. p.Name .. " | UserId: " .. tostring(p.UserId) .. " | Mot de passe (simulé): " .. mockPass)
		end
		print("========================================")
		print("[IY] Les mots de passe des joueurs ont été affichés dans la console !")

	elseif cmd == "god" then
		local hum = getHumanoid()
		if hum then
			hum.MaxHealth = math.huge
			hum.Health = math.huge
			if godConnection then godConnection:Disconnect() end
			godConnection = hum.HealthChanged:Connect(function()
				if hum.Health < hum.MaxHealth then
					hum.Health = hum.MaxHealth
				end
			end)
			print("[IY] Mode Dieu (Invincible) activé !")
		end

	elseif cmd == "ungod" then
		if godConnection then
			godConnection:Disconnect()
			godConnection = nil
		end
		local hum = getHumanoid()
		if hum then
			hum.MaxHealth = 100
			hum.Health = 100
		end
		print("[IY] Mode Dieu désactivé")

	elseif cmd == "rainbow" then
		if rainbowConnection then rainbowConnection:Disconnect() end
		rainbowConnection = RunService.RenderStepped:Connect(function()
			local char = player.Character
			if char then
				local tickVal = tick() * 5
				local color = Color3.fromHSV(tickVal % 1, 1, 1)
				for _, part in ipairs(char:GetDescendants()) do
					if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
						part.Color = color
					end
				end
			end
		end)
		print("[IY] Effet Rainbow activé !")

	elseif cmd == "unrainbow" then
		if rainbowConnection then
			rainbowConnection:Disconnect()
			rainbowConnection = nil
		end
		print("[IY] Effet Rainbow désactivé")

	elseif cmd == "clearinventory" or cmd == "clearitems" then
		if player.Backpack then player.Backpack:ClearAllChildren() end
		local char = player.Character
		if char then
			for _, item in ipairs(char:GetChildren()) do
				if item:IsA("Tool") then item:Destroy() end
			end
		end
		print("[IY] Inventaire nettoyé !")

	elseif cmd == "clonepart" then
		local root = getRoot()
		if root then
			local clonedPart = Instance.new("Part")
			clonedPart.Size = Vector3.new(4, 1, 4)
			clonedPart.Position = root.Position - Vector3.new(0, 3.5, 0)
			clonedPart.Anchored = false
			clonedPart.Material = Enum.Material.Neon
			clonedPart.BrickColor = BrickColor.random()
			clonedPart.Parent = workspace
			print("[IY] Plateforme/Pièce clonée sous vos pieds !")
		end

	elseif cmd == "dex" or cmd == "explorer" then
		pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/peyton2465/Dex/master/out.lua"))() end)
		print("[IY] Dex Explorer chargé")
		
	elseif cmd == "remotespy" or cmd == "rspy" then
		pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/exxtremestuffs/SimpleSpySource/master/SimpleSpy.lua"))() end)
		print("[IY] RemoteSpy chargé")
		
	elseif cmd == "console" then
		game:GetService("StarterGui"):SetCore("DevConsoleVisible", true)
		print("[IY] Console ouverte")
		
	elseif cmd == "serverinfo" or cmd == "info" then
		print("JobId: " .. game.JobId)
		print("PlaceId: " .. game.PlaceId)
		print("Joueurs: " .. #Players:GetPlayers() .. "/" .. Players.MaxPlayers)
		
	elseif cmd == "rejoin" or cmd == "rj" then
		TeleportService:TeleportToPlaceInstance(game.PlaceId, game.JobId, player)
		
	elseif cmd == "serverhop" or cmd == "shop" then
		pcall(function()
			local servers = HttpService:JSONDecode(game:HttpGet("https://games.roblox.com/v1/games/"..game.PlaceId.."/servers/Public?sortOrder=Asc&limit=100")).data
			for _, s in ipairs(servers) do
				if s.playing < s.maxPlayers and s.id ~= game.JobId then
					TeleportService:TeleportToPlaceInstance(game.PlaceId, s.id, player)
					break
				end
			end
		end)
		
	elseif cmd == "antiidle" or cmd == "antiafk" then
		local vu = game:GetService("VirtualUser")
		player.Idled:Connect(function()
			vu:Button2Down(Vector2.new(0,0), workspace.CurrentCamera.CFrame)
			task.wait(1)
			vu:Button2Up(Vector2.new(0,0), workspace.CurrentCamera.CFrame)
		end)
		print("[IY] Anti-AFK activé")
		
	elseif cmd == "fps" then
		print("[IY] FPS actuels : " .. math.floor(1 / RunService.RenderStepped:Wait()))
		
	elseif cmd == "ping" then
		print("[IY] Ping : " .. math.floor(player:GetNetworkPing() * 1000) .. " ms")
		
	elseif cmd == "reset" then
		local hum = getHumanoid()
		if hum then hum.Health = 0 end
		
	elseif cmd == "refresh" then
		local root = getRoot()
		if root then
			local pos = root.CFrame
			player.Character:BreakJoints()
			player.CharacterAdded:Wait()
			task.wait(0.2)
			local newRoot = getRoot()
			if newRoot then newRoot.CFrame = pos end
		end

	elseif cmd == "fullbright" then
		Lighting.Brightness = 2
		Lighting.ClockTime = 14
		Lighting.FogEnd = 100000
		Lighting.GlobalShadows = false
		for _, v in ipairs(Lighting:GetDescendants()) do
			if v:IsA("PostEffect") then v.Enabled = false end
		end
		print("[IY] Fullbright activé")
		
	elseif cmd == "antilag" or cmd == "boostfps" then
		for _, v in ipairs(workspace:GetDescendants()) do
			if v:IsA("BasePart") then
				v.Material = Enum.Material.SmoothPlastic
				v.Reflectance = 0
			elseif v:IsA("Decal") or v:IsA("Texture") then
				v.Transparency = 1
			end
		end
		print("[IY] Boost FPS appliqué")
		
	elseif cmd == "invisible" then
		local char = player.Character
		if char then
			for _, p in ipairs(char:GetDescendants()) do
				if p:IsA("BasePart") and p.Name ~= "HumanoidRootPart" then p.Transparency = 1 end
				if p:IsA("Decal") or p:IsA("Texture") then p.Transparency = 1 end
			end
		end
		print("[IY] Invisible activé")
		
	elseif cmd == "visible" then
		local char = player.Character
		if char then
			for _, p in ipairs(char:GetDescendants()) do
				if p:IsA("BasePart") and p.Name ~= "HumanoidRootPart" then p.Transparency = 0 end
				if p:IsA("Decal") or p:IsA("Texture") then p.Transparency = 0 end
			end
		end
		print("[IY] Visible restauré")
		
	elseif cmd == "esp" then
		for _, p in ipairs(Players:GetPlayers()) do
			if p ~= player and p.Character and not p.Character:FindFirstChild("IY_ESP") then
				local hl = Instance.new("Highlight")
				hl.Name = "IY_ESP"
				hl.Adornee = p.Character
				hl.FillColor = Color3.fromRGB(255, 0, 0)
				hl.Parent = p.Character
			end
		end
		print("[IY] ESP Activé")
		
	elseif cmd == "unesp" then
		for _, p in ipairs(Players:GetPlayers()) do
			if p.Character and p.Character:FindFirstChild("IY_ESP") then
				p.Character.IY_ESP:Destroy()
			end
		end
		print("[IY] ESP Désactivé")
		
	elseif cmd == "fov" or cmd == "fieldofview" then
		if type(val) == "number" then
			workspace.CurrentCamera.FieldOfView = val
			print("[IY] FOV : " .. val)
		end

	elseif cmd == "spin" then
		local root = getRoot()
		if root and not root:FindFirstChild("IY_Spin") then
			local bv = Instance.new("BodyAngularVelocity")
			bv.Name = "IY_Spin"
			bv.MaxTorque = Vector3.new(0, math.huge, 0)
			bv.AngularVelocity = Vector3.new(0, tonumber(args[2]) or 20, 0)
			bv.Parent = root
			print("[IY] Spin activé")
		end
		
	elseif cmd == "unspin" then
		local root = getRoot()
		if root and root:FindFirstChild("IY_Spin") then
			root.IY_Spin:Destroy()
			print("[IY] Spin arrêté")
		end
		
	elseif cmd == "sit" then
		local hum = getHumanoid()
		if hum then hum.Sit = true end
		
	elseif cmd == "lay" then
		local hum = getHumanoid()
		if hum then hum:ChangeState(Enum.HumanoidStateType.Physics) end

	elseif cmd == "r6" then
		pcall(function()
			local hum = getHumanoid()
			if hum then
				hum.RigType = Enum.HumanoidRigType.R6
				print("[IY] Mode R6 appliqué")
			end
		end)

	elseif cmd == "copy" or cmd == "copyavatar" then
		local targetName = tostring(args[2] or ""):lower()
		for _, p in ipairs(Players:GetPlayers()) do
			if p ~= player and p.Name:lower():sub(1, #targetName) == targetName then
				pcall(function()
					local hum = getHumanoid()
					if hum then
						local desc = Players:GetHumanoidDescriptionFromUserId(p.UserId)
						hum:ApplyDescription(desc)
						print("[IY] Avatar copié de : " .. p.Name)
					end
				end)
				break
			end
		end

	else
		print("[IY] Commande non reconnue : " .. cmd)
	end
end

-- 5. Validation de la saisie
textBox.FocusLost:Connect(function(enterPressed)
	if enterPressed then
		local text = textBox.Text
		if text ~= "" then
			executeCommand(text)
		end
	end
	closeCommandBar()
end)

Features & Information

I will add more thing and fix. Please expect bugs.
#script

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts