-- ===================================================================== -- CENIROSO REMOTE SPY - V1.7 (Ajout du Mode Ralenti / Anti-Spam) -- Basé sur la méthode d'écoute directe (OnClientEvent / OnClientInvoke) -- ===================================================================== if getgenv().SoroniceV1SpyLoaded then if game.CoreGui:FindFirstChild("cenirosoRemoteSpy") then game.CoreGui.SoroniceRemoteSpy:Destroy() end end getgenv().SoroniceV1SpyLoaded = true local CoreGui = game:GetService("CoreGui") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") _G.RawCode = "" -- Système de file d'attente pour le mode Ralenti local RemoteQueue = {} local IsSlowMode = false local MAX_QUEUE_SIZE = 150 -- Limite pour éviter de faire crasher la mémoire si le jeu spamme à l'infini -- ===================================================================== -- 1. CRÉATION DE L'INTERFACE UTILISATEUR (UI) -- ===================================================================== local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "cenirosoRemoteSpy" ScreenGui.Parent = CoreGui ScreenGui.ResetOnSpawn = false ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling local MainFrame = Instance.new("Frame") MainFrame.Name = "MainFrame" MainFrame.Parent = ScreenGui MainFrame.BackgroundColor3 = Color3.fromRGB(35, 37, 43) MainFrame.BorderSizePixel = 0 MainFrame.Position = UDim2.new(0.5, -250, 0.5, -175) MainFrame.Size = UDim2.new(0, 550, 0, 350) MainFrame.Active = true local UICorner = Instance.new("UICorner") UICorner.CornerRadius = UDim.new(0, 8) UICorner.Parent = MainFrame local TopBar = Instance.new("Frame") TopBar.Name = "TopBar" TopBar.Parent = MainFrame TopBar.BackgroundColor3 = Color3.fromRGB(25, 27, 33) TopBar.BorderSizePixel = 0 TopBar.Size = UDim2.new(1, 0, 0, 30) local TopBarCorner = Instance.new("UICorner") TopBarCorner.CornerRadius = UDim.new(0, 8) TopBarCorner.Parent = TopBar local TopBarHider = Instance.new("Frame") TopBarHider.Parent = TopBar TopBarHider.BackgroundColor3 = Color3.fromRGB(25, 27, 33) TopBarHider.BorderSizePixel = 0 TopBarHider.Position = UDim2.new(0, 0, 1, -5) TopBarHider.Size = UDim2.new(1, 0, 0, 5) local Title = Instance.new("TextLabel") Title.Name = "Title" Title.Parent = TopBar Title.BackgroundTransparency = 1 Title.Position = UDim2.new(0, 15, 0, 0) Title.Size = UDim2.new(0.5, 0, 1, 0) Title.Font = Enum.Font.GothamBold Title.Text = "ceniroso Remote Spy - V1.7" Title.TextColor3 = Color3.fromRGB(255, 255, 255) Title.TextSize = 14 Title.TextXAlignment = Enum.TextXAlignment.Left local CloseButton = Instance.new("TextButton") CloseButton.Name = "CloseButton" CloseButton.Parent = TopBar CloseButton.BackgroundTransparency = 1 CloseButton.Position = UDim2.new(1, -30, 0, 0) CloseButton.Size = UDim2.new(0, 30, 1, 0) CloseButton.Font = Enum.Font.GothamBold CloseButton.Text = "X" CloseButton.TextColor3 = Color3.fromRGB(200, 200, 200) CloseButton.TextSize = 14 local RemotesList = Instance.new("ScrollingFrame") RemotesList.Name = "RemotesList" RemotesList.Parent = MainFrame RemotesList.Active = true RemotesList.BackgroundColor3 = Color3.fromRGB(28, 30, 36) RemotesList.BorderSizePixel = 0 RemotesList.Position = UDim2.new(0, 10, 0, 40) RemotesList.Size = UDim2.new(0, 180, 1, -50) RemotesList.CanvasSize = UDim2.new(0, 0, 0, 0) RemotesList.ScrollBarThickness = 4 RemotesList.ScrollBarImageColor3 = Color3.fromRGB(80, 80, 80) local ListCorner = Instance.new("UICorner") ListCorner.CornerRadius = UDim.new(0, 6) ListCorner.Parent = RemotesList local UIListLayout = Instance.new("UIListLayout") UIListLayout.Parent = RemotesList UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder UIListLayout.Padding = UDim.new(0, 5) local CodeDisplay = Instance.new("TextLabel") CodeDisplay.Name = "CodeDisplay" CodeDisplay.Parent = MainFrame CodeDisplay.BackgroundColor3 = Color3.fromRGB(40, 42, 54) CodeDisplay.BorderSizePixel = 0 CodeDisplay.Position = UDim2.new(0, 200, 0, 40) CodeDisplay.Size = UDim2.new(1, -210, 1, -90) CodeDisplay.Font = Enum.Font.Code CodeDisplay.Text = "-- En attente d'événements...\n-- Les scripts apparaîtront ici avec la coloration syntaxique." CodeDisplay.TextColor3 = Color3.fromRGB(248, 248, 242) CodeDisplay.TextSize = 14 CodeDisplay.TextXAlignment = Enum.TextXAlignment.Left CodeDisplay.TextYAlignment = Enum.TextYAlignment.Top CodeDisplay.RichText = true CodeDisplay.TextWrapped = true local CodeCorner = Instance.new("UICorner") CodeCorner.CornerRadius = UDim.new(0, 6) CodeCorner.Parent = CodeDisplay local UIPadding = Instance.new("UIPadding") UIPadding.Parent = CodeDisplay UIPadding.PaddingTop = UDim.new(0, 10) UIPadding.PaddingLeft = UDim.new(0, 10) -- Boutons (Repositionnés pour inclure le bouton Ralentir) local CopyButton = Instance.new("TextButton") CopyButton.Name = "CopyButton" CopyButton.Parent = MainFrame CopyButton.BackgroundColor3 = Color3.fromRGB(45, 100, 200) CopyButton.Position = UDim2.new(0, 200, 1, -40) CopyButton.Size = UDim2.new(0, 110, 0, 30) CopyButton.Font = Enum.Font.GothamBold CopyButton.Text = "Copier" CopyButton.TextColor3 = Color3.fromRGB(255, 255, 255) CopyButton.TextSize = 13 local CopyCorner = Instance.new("UICorner") CopyCorner.CornerRadius = UDim.new(0, 6) CopyCorner.Parent = CopyButton local SlowButton = Instance.new("TextButton") SlowButton.Name = "SlowButton" SlowButton.Parent = MainFrame SlowButton.BackgroundColor3 = Color3.fromRGB(120, 120, 120) -- Gris par défaut (Désactivé) SlowButton.Position = UDim2.new(0, 315, 1, -40) SlowButton.Size = UDim2.new(0, 110, 0, 30) SlowButton.Font = Enum.Font.GothamBold SlowButton.Text = "Ralentir: OFF" SlowButton.TextColor3 = Color3.fromRGB(255, 255, 255) SlowButton.TextSize = 13 local SlowCorner = Instance.new("UICorner") SlowCorner.CornerRadius = UDim.new(0, 6) SlowCorner.Parent = SlowButton local ClearButton = Instance.new("TextButton") ClearButton.Name = "ClearButton" ClearButton.Parent = MainFrame ClearButton.BackgroundColor3 = Color3.fromRGB(200, 60, 60) ClearButton.Position = UDim2.new(0, 430, 1, -40) ClearButton.Size = UDim2.new(0, 110, 0, 30) ClearButton.Font = Enum.Font.GothamBold ClearButton.Text = "Effacer" ClearButton.TextColor3 = Color3.fromRGB(255, 255, 255) ClearButton.TextSize = 13 local ClearCorner = Instance.new("UICorner") ClearCorner.CornerRadius = UDim.new(0, 6) ClearCorner.Parent = ClearButton -- ===================================================================== -- 2. GESTION DU DÉPLACEMENT DE LA FENÊTRE (DRAG) -- ===================================================================== local dragging, dragInput, dragStart, startPos TopBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = MainFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) TopBar.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then local delta = input.Position - dragStart MainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) CloseButton.MouseButton1Click:Connect(function() ScreenGui:Destroy() end) -- ===================================================================== -- 3. MOTEUR DE COLORATION SYNTAXIQUE (STUDIO LUA THEME) -- ===================================================================== local function ApplySyntaxHighlighting(codeString) local highlighted = codeString:gsub("<", "<"):gsub(">", ">") local colorKeyword = "#FF79C6" local colorString = "#F1FA8C" local colorNumber = "#BD93F9" local colorMethod = "#50FA7B" highlighted = highlighted:gsub('("[^"]*")', '%1') highlighted = highlighted:gsub("([%s%[,=])(%d+%.?%d*)([%s%],;])", "%1%2%3") highlighted = highlighted:gsub("^(%d+%.?%d*)([%s%],;])", "%1%2") highlighted = highlighted:gsub("(FireServer)", '%1') highlighted = highlighted:gsub("(InvokeServer)", '%1') local keywords = { "local", "function", "return", "if", "then", "else", "elseif", "end", "for", "while", "do", "in", "and", "or", "not", "true", "false", "nil", "unpack" } for _, kw in pairs(keywords) do highlighted = highlighted:gsub("([^%a_])("..kw..")([^%a_])", "%1%2%3") highlighted = highlighted:gsub("^("..kw..")([^%a_])", "%1%2") highlighted = highlighted:gsub("([^%a_])("..kw..")$", "%1%2") end return highlighted end -- ===================================================================== -- 4. LOGIQUE DE FORMATAGE DES ARGUMENTS -- ===================================================================== local function getPathToInstance(instance) local path = {} local current = instance while current and current ~= game do local name = current.Name if name:sub(1, 4) == "Game" then name = "game" .. name:sub(5) end table.insert(path, 1, name) current = current.Parent end return table.concat(path, ".") end local function formatValue(value) if typeof(value) == "string" then return string.format("%q", value) elseif typeof(value) == "number" then return tostring(value) elseif typeof(value) == "boolean" then return value and "true" or "false" elseif typeof(value) == "Instance" then return getPathToInstance(value) elseif typeof(value) == "Vector3" then return string.format("Vector3.new(%f, %f, %f)", value.X, value.Y, value.Z) elseif typeof(value) == "CFrame" then return string.format("CFrame.new(%f, %f, %f)", value.X, value.Y, value.Z) else return string.format("%q", tostring(value)) end end local function Format(args) local formattedArgs = {} for i, arg in ipairs(args) do formattedArgs[i] = string.format("[%d] = %s", i, formatValue(arg)) end return formattedArgs end -- ===================================================================== -- 5. INTERCEPTION, AFFICHAGE UI ET SYSTÈME DE FILE D'ATTENTE -- ===================================================================== -- Fonction qui crée le bouton visuellement (appelée par la file d'attente) local function CreateRemoteButton(remoteName, generatedCode) local RemoteBtn = Instance.new("TextButton") RemoteBtn.Name = remoteName RemoteBtn.Parent = RemotesList RemoteBtn.BackgroundColor3 = Color3.fromRGB(45, 47, 55) RemoteBtn.BorderSizePixel = 0 RemoteBtn.Size = UDim2.new(1, -10, 0, 25) RemoteBtn.Position = UDim2.new(0, 5, 0, 0) RemoteBtn.Font = Enum.Font.Gotham RemoteBtn.Text = " " .. remoteName RemoteBtn.TextColor3 = Color3.fromRGB(220, 220, 220) RemoteBtn.TextSize = 13 RemoteBtn.TextXAlignment = Enum.TextXAlignment.Left local BtnCorner = Instance.new("UICorner") BtnCorner.CornerRadius = UDim.new(0, 4) BtnCorner.Parent = RemoteBtn RemotesList.CanvasSize = UDim2.new(0, 0, 0, UIListLayout.AbsoluteContentSize.Y + 10) RemoteBtn.MouseButton1Click:Connect(function() _G.RawCode = generatedCode local coloredCode = ApplySyntaxHighlighting(generatedCode) CodeDisplay.Text = coloredCode end) end -- Boucle principale de la file d'attente (Tourne en arrière-plan) task.spawn(function() while true do if #RemoteQueue > 0 then if IsSlowMode then -- Si ralenti : On en prend un seul, on l'affiche, et on attend 5 secondes local eventData = table.remove(RemoteQueue, 1) CreateRemoteButton(eventData.Name, eventData.Code) task.wait(5) else -- Si normal : On affiche tout ce qui est dans la file instantanément for i = 1, #RemoteQueue do local eventData = table.remove(RemoteQueue, 1) CreateRemoteButton(eventData.Name, eventData.Code) end task.wait(0.1) end else task.wait(0.1) end end end) -- Fonction qui intercepte et envoie dans la file d'attente local function handleRemote(remote) local path = {} local current = remote while current and current.Parent ~= game do local name = current.Name if name:sub(1, 4) == "Game" then name = "game" .. name:sub(5) end table.insert(path, 1, name) current = current.Parent end local fullPath = table.concat(path, ".") if remote:IsA("RemoteEvent") then remote.OnClientEvent:Connect(function(...) local args = {...} local argsFormatted = Format(args) local argsString = table.concat(argsFormatted, ",\n ") local code = string.format("local args = {\n %s\n}\n\n%s:FireServer(unpack(args))", argsString, fullPath) -- Au lieu d'afficher direct, on ajoute à la file d'attente if #RemoteQueue < MAX_QUEUE_SIZE then table.insert(RemoteQueue, {Name = remote.Name, Code = code}) end end) elseif remote:IsA("RemoteFunction") then remote.OnClientInvoke = function(...) local args = {...} local argsFormatted = Format(args) local argsString = table.concat(argsFormatted, ",\n ") local code = string.format("local args = {\n %s\n}\n\nlocal response = %s:InvokeServer(unpack(args))", argsString, fullPath) if #RemoteQueue < MAX_QUEUE_SIZE then table.insert(RemoteQueue, {Name = remote.Name, Code = code}) end return ... end end end local function wrapRemotes(folder) for _, obj in ipairs(folder:GetDescendants()) do if obj:IsA("RemoteEvent") or obj:IsA("RemoteFunction") then handleRemote(obj) end end folder.DescendantAdded:Connect(function(descendant) if descendant:IsA("RemoteEvent") or descendant:IsA("RemoteFunction") then handleRemote(descendant) end end) end -- ===================================================================== -- 6. LANCEMENT ET BOUTONS ANNEXES -- ===================================================================== local folders = { game:GetService("ReplicatedStorage"), game:GetService("StarterGui"), game:GetService("StarterPack"), game:GetService("StarterPlayer") } for _, folder in ipairs(folders) do wrapRemotes(folder) end CopyButton.MouseButton1Click:Connect(function() if setclipboard then if _G.RawCode ~= "" then setclipboard(_G.RawCode) CopyButton.Text = "Copié !" task.wait(1.5) CopyButton.Text = "Copier" end else warn("Ton exécuteur ne supporte pas setclipboard") end end) SlowButton.MouseButton1Click:Connect(function() IsSlowMode = not IsSlowMode -- Alterne entre vrai et faux if IsSlowMode then SlowButton.Text = "Ralentir: ON" SlowButton.BackgroundColor3 = Color3.fromRGB(200, 130, 40) -- Passe en Orange else SlowButton.Text = "Ralentir: OFF" SlowButton.BackgroundColor3 = Color3.fromRGB(120, 120, 120) -- Retourne en Gris end end) ClearButton.MouseButton1Click:Connect(function() -- On vide d'abord la file d'attente RemoteQueue = {} -- Puis on vide l'interface for _, child in pairs(RemotesList:GetChildren()) do if child:IsA("TextButton") then child:Destroy() end end RemotesList.CanvasSize = UDim2.new(0, 0, 0, 0) CodeDisplay.Text = "-- En attente d'événements...\n-- Les scripts apparaîtront ici avec la coloration syntaxique." _G.RawCode = "" end) print("SORONICE Spy V1.7 chargé avec succès (Mode Ralenti intégré).")