local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local ContentProvider = game:GetService("ContentProvider") local LogService = game:GetService("LogService") -- Création de l'interface principale local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "UniversalAssetFinder" ScreenGui.ResetOnSpawn = false -- Utilisation de CoreGui si disponible (pour les exécuteurs), sinon PlayerGui local parentGui = game:GetService("CoreGui") or game:GetService("Players").LocalPlayer:WaitForChild("PlayerGui") ScreenGui.Parent = parentGui -- Fenêtre principale local MainFrame = Instance.new("Frame") MainFrame.Name = "MainFrame" MainFrame.Size = UDim2.new(0, 360, 0, 420) MainFrame.Position = UDim2.new(0.5, -180, 0.5, -210) MainFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25) MainFrame.BorderSizePixel = 0 MainFrame.Parent = ScreenGui local MainCorner = Instance.new("UICorner") MainCorner.CornerRadius = UDim.new(0, 14) MainCorner.Parent = MainFrame -- Barre de titre (TopBar) local TopBar = Instance.new("Frame") TopBar.Name = "TopBar" TopBar.Size = UDim2.new(1, 0, 0, 45) TopBar.BackgroundColor3 = Color3.fromRGB(35, 35, 35) TopBar.BorderSizePixel = 0 TopBar.Parent = MainFrame local TopCorner = Instance.new("UICorner") TopCorner.CornerRadius = UDim.new(0, 14) TopCorner.Parent = TopBar local Title = Instance.new("TextLabel") Title.Size = UDim2.new(0.6, 0, 1, 0) Title.Position = UDim2.new(0, 15, 0, 0) Title.Text = "Universal Image Finder" Title.TextColor3 = Color3.fromRGB(255, 255, 255) Title.TextXAlignment = Enum.TextXAlignment.Left Title.Font = Enum.Font.SourceSansBold Title.TextSize = 16 Title.BackgroundTransparency = 1 Title.Parent = TopBar -- Bouton Réduire (Minimize) local MinBtn = Instance.new("TextButton") MinBtn.Size = UDim2.new(0, 32, 0, 32) MinBtn.Position = UDim2.new(1, -42, 0, 6) MinBtn.Text = "-" MinBtn.TextColor3 = Color3.fromRGB(255, 255, 255) MinBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 50) MinBtn.Font = Enum.Font.SourceSansBold MinBtn.TextSize = 18 MinBtn.Parent = TopBar local MinCorner = Instance.new("UICorner") MinCorner.CornerRadius = UDim.new(0, 8) MinCorner.Parent = MinBtn -- Menu Déroulant (ScrollingFrame) local ScrollContainer = Instance.new("ScrollingFrame") ScrollContainer.Name = "ScrollContainer" ScrollContainer.Size = UDim2.new(1, -20, 1, -65) ScrollContainer.Position = UDim2.new(0, 10, 0, 55) ScrollContainer.BackgroundTransparency = 1 ScrollContainer.ScrollBarThickness = 6 ScrollContainer.CanvasSize = UDim2.new(0, 0, 0, 0) ScrollContainer.Parent = MainFrame local Layout = Instance.new("UIListLayout") Layout.Padding = UDim.new(0, 8) Layout.SortOrder = Enum.SortOrder.LayoutOrder Layout.Parent = ScrollContainer -- Ajustement auto de la taille du menu de défilement Layout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() ScrollContainer.CanvasSize = UDim2.new(0, 0, 0, Layout.AbsoluteContentSize.Y + 15) end) -- Nettoyage des chaînes pour extraire proprement l'ID de l'image local function cleanAssetId(str) if not str then return nil end local id = string.match(str, "rbxassetid://%d+") or string.match(str, "http[s]?://%S+%d+") or string.match(str, "%d+") if id and tonumber(string.match(id, "%d+")) then if not string.find(id, "rbxassetid://") and tonumber(id) then return "rbxassetid://" .. id end return id end return nil end -- Fonction pour ajouter une image à la liste du menu local function addImageRow(assetId) local cleanId = cleanAssetId(assetId) if not cleanId then return end -- Empêche les doublons dans le menu local safeName = string.gsub(cleanId, "%D", "") if ScrollContainer:FindFirstChild(safeName) then return end local Row = Instance.new("Frame") Row.Name = safeName Row.Size = UDim2.new(1, -10, 0, 65) Row.BackgroundColor3 = Color3.fromRGB(38, 38, 38) Row.Parent = ScrollContainer local RowCorner = Instance.new("UICorner") RowCorner.CornerRadius = UDim.new(0, 10) RowCorner.Parent = Row -- Aperçu Visuel local ImgPreview = Instance.new("ImageLabel") ImgPreview.Size = UDim2.new(0, 55, 0, 55) ImgPreview.Position = UDim2.new(0, 5, 0, 5) ImgPreview.Image = cleanId ImgPreview.BackgroundColor3 = Color3.fromRGB(15, 15, 15) ImgPreview.Parent = Row local ImgCorner = Instance.new("UICorner") ImgCorner.CornerRadius = UDim.new(0, 8) ImgCorner.Parent = ImgPreview -- Bouton "Copy" local CopyBtn = Instance.new("TextButton") CopyBtn.Size = UDim2.new(0, 75, 0, 32) CopyBtn.Position = UDim2.new(1, -85, 0, 16) CopyBtn.Text = "Copy" CopyBtn.TextColor3 = Color3.fromRGB(255, 255, 255) CopyBtn.BackgroundColor3 = Color3.fromRGB(0, 140, 255) CopyBtn.Font = Enum.Font.SourceSansBold CopyBtn.TextSize = 14 CopyBtn.Parent = Row local CopyCorner = Instance.new("UICorner") CopyCorner.CornerRadius = UDim.new(0, 8) CopyCorner.Parent = CopyBtn -- Affichage du lien / ID au centre local IdLabel = Instance.new("TextLabel") IdLabel.Size = UDim2.new(1, -180, 1, 0) IdLabel.Position = UDim2.new(0, 70, 0, 0) IdLabel.Text = cleanId IdLabel.TextColor3 = Color3.fromRGB(220, 220, 220) IdLabel.Font = Enum.Font.SourceSans IdLabel.TextSize = 13 IdLabel.TextWrapped = true IdLabel.BackgroundTransparency = 1 IdLabel.TextXAlignment = Enum.TextXAlignment.Left IdLabel.Parent = Row -- Script du Clic de copie CopyBtn.MouseButton1Click:Connect(function() if setclipboard then setclipboard(cleanId) CopyBtn.Text = "Copied!" CopyBtn.BackgroundColor3 = Color3.fromRGB(46, 204, 113) task.wait(1.2) CopyBtn.Text = "Copy" CopyBtn.BackgroundColor3 = Color3.fromRGB(0, 140, 255) else CopyBtn.Text = "No Exec" task.wait(1.2) CopyBtn.Text = "Copy" end end) end -- Système de Drag (Glisser/Déplacer le menu avec la TopBar) local dragging, dragInput, dragStart, startPos local function update(input) 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 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.MouseBehavior or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then update(input) end end) -- Système de réduction Toggle (Minimiser l'interface) local minimized = false MinBtn.MouseButton1Click:Connect(function() minimized = not minimized if minimized then ScrollContainer.Visible = false TweenService:Create(MainFrame, TweenInfo.new(0.25), {Size = UDim2.new(0, 360, 0, 45)}):Play() MinBtn.Text = "+" else TweenService:Create(MainFrame, TweenInfo.new(0.25), {Size = UDim2.new(0, 360, 0, 420)}):Play() task.wait(0.25) ScrollContainer.Visible = true MinBtn.Text = "-" end end) -- METHODE 1 : Scan classique de la structure du jeu local function scanAllObjects() for _, object in pairs(game:GetDescendants()) do pcall(function() if object:IsA("ImageLabel") or object:IsA("ImageButton") or object:IsA("Decal") or object:IsA("Texture") then if object.Image and object.Image ~= "" then addImageRow(object.Image) end elseif object:IsA("MeshPart") and object.TextureID ~= "" then addImageRow(object.TextureID) end end) end end -- METHODE 2 : Capture en temps réel de TOUTES les images chargées à l'écran -- Cette fonction intercepte les requêtes réseau du moteur de rendu dès qu'un menu s'ouvre local function setupRealtimeTracker() -- Analyse ce qui s'ajoute dynamiquement dans le jeu game.DescendantAdded:Connect(function(object) pcall(function() if object:IsA("ImageLabel") or object:IsA("ImageButton") or object:IsA("Decal") or object:IsA("Texture") then if object.Image ~= "" then addImageRow(object.Image) end object:GetPropertyChangedSignal("Image"):Connect(function() if object.Image ~= "" then addImageRow(object.Image) end end) end end) end) -- Interception des logs de chargement d'assets (idéal pour choper les images des scripts tiers/menus externes) LogService.MessageReceived:Connect(function(message, messageType) if string.find(message, "asset") or string.find(message, "rbxassetid") then local potentialId = cleanAssetId(message) if potentialId then addImageRow(potentialId) end end end) end -- Exécution scanAllObjects() setupRealtimeTracker()