-- Alchimiste Hub - Kawaii Anime RNG -- Interface originale de A a Z, inspiree des UX Rayfield/Fluent sans les charger. if not game:IsLoaded() then game.Loaded:Wait() end local Players = game:GetService("Players") local RS = game:GetService("ReplicatedStorage") local UIS = game:GetService("UserInputService") local VirtualUser = game:GetService("VirtualUser") local TweenService = game:GetService("TweenService") local CoreGui = game:GetService("CoreGui") local LP = Players.LocalPlayer local Remotes = RS:WaitForChild("Remotes", 15) assert(LP and Remotes, "Alchimiste Hub: Remotes introuvable") local old = CoreGui:FindFirstChild("AlchimisteKawaiiHub") if old then old:Destroy() end local C = { bg = Color3.fromRGB(10, 8, 18), panel = Color3.fromRGB(20, 16, 34), card = Color3.fromRGB(29, 23, 47), hover = Color3.fromRGB(40, 31, 62), purple = Color3.fromRGB(168, 85, 247), pink = Color3.fromRGB(244, 114, 182), text = Color3.fromRGB(245, 240, 255), muted = Color3.fromRGB(163, 153, 184), off = Color3.fromRGB(72, 62, 91), green = Color3.fromRGB(74, 222, 128), } local S = { running = true, delay = .75, maxDistance = 30, die = "Basic", amount = 1, potion = "Luck I", potionAmount = "Max", diceFilter = "Tous", potionFilter = "Tous", antiAfk = true, autoOpen = false, autoClaim = false, autoEquip = false, autoWheel = false, autoWheelClaim = false, autoPotion = false, autoBuyDice = false, autoBuyPotion = false, autoSell = false, autoHatch = false, dice = {}, potions = {}, catalog = {}, stock = {}, cash = "aucun signal", } local AllDice = { "Basic", "Bronze", "Iron", "Silver", "Gold", "Sapphire", "Ruby", "Emerald", "Crystal", "Obsidian", "Arcane", "Void", "Infernal", "Celestial", "Galactic", "Nebula", "Demonic", "Abyssal", "Ethereal", "Eldritch", "Sovereign", "Quantum", "Paradox", "Singularity", "Oblivion", "Transcendent", "Seraphic", "Omnipotent", "Valentine", "Maid Dice", } local AllPotions = { "Luck I", "Luck II", "Luck III", "Cash I", "Cash II", "Cash III", "Mutation I", "Mutation II", "Dice Consumption I", "Dice Consumption II", "Egg Luck I", "Egg Luck II", "Godly Luck", "Godly Cash", "Godly Mutation", "Godly Dice Consumption", "Godly Egg Luck", "Rainbow Godly", } local function new(class, props, parent) local object = Instance.new(class) for key, value in pairs(props or {}) do object[key] = value end object.Parent = parent return object end local function corner(parent, radius) return new("UICorner", {CornerRadius = UDim.new(0, radius or 10)}, parent) end local function stroke(parent, color, transparency) return new("UIStroke", {Color = color or C.purple, Transparency = transparency or .55, Thickness = 1}, parent) end local function tween(object, props, time) TweenService:Create(object, TweenInfo.new(time or .18, Enum.EasingStyle.Quint), props):Play() end local function remote(name) return Remotes:FindFirstChild(name) end local function call(name, ...) local object, args = remote(name), table.pack(...) if not object then return false, "Remote absent: " .. name end return pcall(function() if object:IsA("RemoteFunction") then return object:InvokeServer(table.unpack(args, 1, args.n)) elseif object:IsA("RemoteEvent") then object:FireServer(table.unpack(args, 1, args.n)) return true end error("Type non pris en charge") end) end local guiParent = CoreGui pcall(function() if gethui then guiParent = gethui() end end) local oldInParent = guiParent:FindFirstChild("AlchimisteKawaiiHub") if oldInParent then oldInParent:Destroy() end local Gui = new("ScreenGui", { Name = "AlchimisteKawaiiHub", ResetOnSpawn = false, ZIndexBehavior = Enum.ZIndexBehavior.Sibling, IgnoreGuiInset = true, }, guiParent) local Shadow = new("ImageLabel", { BackgroundTransparency = 1, Image = "rbxassetid://6015897843", ImageColor3 = Color3.new(), ImageTransparency = .25, ScaleType = Enum.ScaleType.Slice, SliceCenter = Rect.new(49, 49, 450, 450), Size = UDim2.new(0, 680, 0, 500), Position = UDim2.new(.5, -340, .5, -250), }, Gui) local Main = new("Frame", { Name = "Window", Size = UDim2.new(0, 640, 0, 460), Position = UDim2.new(.5, -320, .5, -230), BackgroundColor3 = C.bg, BorderSizePixel = 0, ClipsDescendants = true, }, Gui) corner(Main, 16) stroke(Main, C.purple, .25) new("UIGradient", { Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, Color3.fromRGB(20, 12, 35)), ColorSequenceKeypoint.new(1, Color3.fromRGB(8, 8, 15)), }), Rotation = 25, }, Main) local Sidebar = new("Frame", { Size = UDim2.new(0, 170, 1, 0), BackgroundColor3 = C.panel, BackgroundTransparency = .12, BorderSizePixel = 0, }, Main) new("Frame", { Size = UDim2.new(0, 1, 1, -34), Position = UDim2.new(1, 0, 0, 17), BackgroundColor3 = C.purple, BackgroundTransparency = .72, BorderSizePixel = 0, }, Sidebar) new("TextLabel", { Size = UDim2.new(1, -24, 0, 28), Position = UDim2.new(0, 16, 0, 15), BackgroundTransparency = 1, Text = "ALCHIMISTE", Font = Enum.Font.GothamBold, TextSize = 19, TextColor3 = C.text, TextXAlignment = Enum.TextXAlignment.Left, }, Sidebar) new("TextLabel", { Size = UDim2.new(1, -24, 0, 20), Position = UDim2.new(0, 16, 0, 42), BackgroundTransparency = 1, Text = "KAWAII RNG / v1.0", Font = Enum.Font.GothamMedium, TextSize = 10, TextColor3 = C.pink, TextXAlignment = Enum.TextXAlignment.Left, }, Sidebar) local Nav = new("Frame", { Size = UDim2.new(1, -20, 1, -125), Position = UDim2.new(0, 10, 0, 82), BackgroundTransparency = 1, }, Sidebar) new("UIListLayout", {Padding = UDim.new(0, 7), SortOrder = Enum.SortOrder.LayoutOrder}, Nav) local Footer = new("TextLabel", { Size = UDim2.new(1, -24, 0, 30), Position = UDim2.new(0, 14, 1, -42), BackgroundTransparency = 1, Text = "script.alchimiste.xyz", TextColor3 = C.muted, Font = Enum.Font.Gotham, TextSize = 10, }, Sidebar) local Top = new("Frame", { Size = UDim2.new(1, -170, 0, 64), Position = UDim2.new(0, 170, 0, 0), BackgroundTransparency = 1, }, Main) local PageTitle = new("TextLabel", { Size = UDim2.new(1, -100, 1, 0), Position = UDim2.new(0, 22, 0, 0), BackgroundTransparency = 1, Text = "Dashboard", TextColor3 = C.text, Font = Enum.Font.GothamBold, TextSize = 21, TextXAlignment = Enum.TextXAlignment.Left, }, Top) local Minimize = new("TextButton", { Size = UDim2.new(0, 32, 0, 32), Position = UDim2.new(1, -76, 0, 16), BackgroundColor3 = C.card, Text = "-", TextColor3 = C.text, Font = Enum.Font.GothamBold, TextSize = 19, AutoButtonColor = false, }, Top) corner(Minimize, 9) local Close = new("TextButton", { Size = UDim2.new(0, 32, 0, 32), Position = UDim2.new(1, -38, 0, 16), BackgroundColor3 = Color3.fromRGB(78, 32, 58), Text = "x", TextColor3 = C.pink, Font = Enum.Font.GothamBold, TextSize = 15, AutoButtonColor = false, }, Top) corner(Close, 9) local Content = new("Frame", { Size = UDim2.new(1, -192, 1, -78), Position = UDim2.new(0, 182, 0, 66), BackgroundTransparency = 1, ClipsDescendants = true, }, Main) local Toast = new("TextLabel", { Size = UDim2.new(0, 310, 0, 40), Position = UDim2.new(1, -324, 1, 50), BackgroundColor3 = C.card, TextColor3 = C.text, Font = Enum.Font.GothamMedium, TextSize = 12, Text = "", ZIndex = 20, BorderSizePixel = 0, }, Main) corner(Toast, 10) stroke(Toast, C.pink, .4) local toastId = 0 local function notify(text) toastId += 1 local id = toastId Toast.Text = " " .. tostring(text) tween(Toast, {Position = UDim2.new(1, -324, 1, -52)}, .25) task.delay(3, function() if id == toastId then tween(Toast, {Position = UDim2.new(1, -324, 1, 50)}, .25) end end) end local pages, navButtons = {}, {} local function page(name) local scroll = new("ScrollingFrame", { Name = name, Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, BorderSizePixel = 0, ScrollBarThickness = 3, ScrollBarImageColor3 = C.purple, CanvasSize = UDim2.new(), AutomaticCanvasSize = Enum.AutomaticSize.Y, Visible = false, }, Content) new("UIListLayout", {Padding = UDim.new(0, 9), SortOrder = Enum.SortOrder.LayoutOrder}, scroll) new("UIPadding", {PaddingRight = UDim.new(0, 5), PaddingBottom = UDim.new(0, 8)}, scroll) pages[name] = scroll local button = new("TextButton", { Size = UDim2.new(1, 0, 0, 39), BackgroundColor3 = C.card, BackgroundTransparency = 1, BorderSizePixel = 0, Text = " " .. name, TextColor3 = C.muted, Font = Enum.Font.GothamMedium, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, AutoButtonColor = false, }, Nav) corner(button, 9) navButtons[name] = button button.MouseButton1Click:Connect(function() for n, p in pairs(pages) do p.Visible = n == name tween(navButtons[n], { BackgroundTransparency = n == name and 0 or 1, TextColor3 = n == name and C.text or C.muted, }) end PageTitle.Text = name end) return scroll end local function label(parent, title, text) local box = new("Frame", {Size = UDim2.new(1, -3, 0, 70), BackgroundColor3 = C.card, BorderSizePixel = 0}, parent) corner(box, 11) new("TextLabel", {Size = UDim2.new(1, -24, 0, 24), Position = UDim2.new(0, 12, 0, 9), BackgroundTransparency = 1, Text = title, TextColor3 = C.text, Font = Enum.Font.GothamBold, TextSize = 13, TextXAlignment = Enum.TextXAlignment.Left}, box) local desc = new("TextLabel", {Size = UDim2.new(1, -24, 0, 28), Position = UDim2.new(0, 12, 0, 33), BackgroundTransparency = 1, Text = text, TextColor3 = C.muted, Font = Enum.Font.Gotham, TextSize = 11, TextWrapped = true, TextXAlignment = Enum.TextXAlignment.Left}, box) return desc end local function button(parent, title, callback) local b = new("TextButton", {Size = UDim2.new(1, -3, 0, 43), BackgroundColor3 = C.card, BorderSizePixel = 0, Text = " " .. title .. " >", TextColor3 = C.text, Font = Enum.Font.GothamMedium, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, AutoButtonColor = false}, parent) corner(b, 10) b.MouseEnter:Connect(function() tween(b, {BackgroundColor3 = C.hover}) end) b.MouseLeave:Connect(function() tween(b, {BackgroundColor3 = C.card}) end) b.MouseButton1Click:Connect(function() task.spawn(callback) end) end local function toggle(parent, title, key) local row = new("TextButton", {Size = UDim2.new(1, -3, 0, 43), BackgroundColor3 = C.card, BorderSizePixel = 0, Text = " " .. title, TextColor3 = C.text, Font = Enum.Font.GothamMedium, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left, AutoButtonColor = false}, parent) corner(row, 10) local track = new("Frame", {Size = UDim2.new(0, 42, 0, 22), Position = UDim2.new(1, -54, .5, -11), BackgroundColor3 = S[key] and C.purple or C.off, BorderSizePixel = 0}, row) corner(track, 11) local dot = new("Frame", {Size = UDim2.new(0, 16, 0, 16), Position = S[key] and UDim2.new(1, -19, .5, -8) or UDim2.new(0, 3, .5, -8), BackgroundColor3 = C.text, BorderSizePixel = 0}, track) corner(dot, 8) row.MouseButton1Click:Connect(function() S[key] = not S[key] tween(track, {BackgroundColor3 = S[key] and C.purple or C.off}) tween(dot, {Position = S[key] and UDim2.new(1, -19, .5, -8) or UDim2.new(0, 3, .5, -8)}) end) end local function input(parent, title, default, callback) local row = new("Frame", {Size = UDim2.new(1, -3, 0, 48), BackgroundColor3 = C.card, BorderSizePixel = 0}, parent) corner(row, 10) new("TextLabel", {Size = UDim2.new(.5, -12, 1, 0), Position = UDim2.new(0, 12, 0, 0), BackgroundTransparency = 1, Text = title, TextColor3 = C.text, Font = Enum.Font.GothamMedium, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left}, row) local box = new("TextBox", {Size = UDim2.new(.44, 0, 0, 30), Position = UDim2.new(.53, 0, .5, -15), BackgroundColor3 = C.bg, Text = default, PlaceholderText = default, TextColor3 = C.text, Font = Enum.Font.Gotham, TextSize = 11, ClearTextOnFocus = false, BorderSizePixel = 0}, row) corner(box, 8) box.FocusLost:Connect(function() callback(box.Text) end) end -- Dropdown maison avec liste scrollable, selection, filtre et rafraichissement dynamique. local OpenDropdown local function dropdown(parent, title, options, default, callback) local values = table.clone(options) local selected = default or values[1] or "Aucun" local opened = false local row = new("Frame", {Size = UDim2.new(1, -3, 0, 48), BackgroundColor3 = C.card, BorderSizePixel = 0, ClipsDescendants = true}, parent) corner(row, 10) new("TextLabel", {Size = UDim2.new(.45, -12, 0, 48), Position = UDim2.new(0, 12, 0, 0), BackgroundTransparency = 1, Text = title, TextColor3 = C.text, Font = Enum.Font.GothamMedium, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left}, row) local selector = new("TextButton", {Size = UDim2.new(.49, -10, 0, 30), Position = UDim2.new(.5, 0, 0, 9), BackgroundColor3 = C.bg, BorderSizePixel = 0, Text = " " .. selected .. " v", TextColor3 = C.text, Font = Enum.Font.Gotham, TextSize = 10, TextXAlignment = Enum.TextXAlignment.Left, TextTruncate = Enum.TextTruncate.AtEnd, AutoButtonColor = false}, row) corner(selector, 8) stroke(selector, C.purple, .65) local list = new("ScrollingFrame", {Size = UDim2.new(1, -24, 0, 0), Position = UDim2.new(0, 12, 0, 46), BackgroundColor3 = C.bg, BorderSizePixel = 0, ScrollBarThickness = 2, ScrollBarImageColor3 = C.purple, CanvasSize = UDim2.new(), AutomaticCanvasSize = Enum.AutomaticSize.Y, Visible = false}, row) corner(list, 8) new("UIListLayout", {Padding = UDim.new(0, 3), SortOrder = Enum.SortOrder.LayoutOrder}, list) new("UIPadding", {PaddingTop = UDim.new(0, 4), PaddingBottom = UDim.new(0, 4), PaddingLeft = UDim.new(0, 4), PaddingRight = UDim.new(0, 4)}, list) local api = {} local function close() opened, list.Visible = false, false selector.Text = " " .. selected .. " v" tween(row, {Size = UDim2.new(1, -3, 0, 48)}) if OpenDropdown == api then OpenDropdown = nil end end local function build() for _, child in ipairs(list:GetChildren()) do if child:IsA("TextButton") then child:Destroy() end end for _, option in ipairs(values) do local item = new("TextButton", {Size = UDim2.new(1, 0, 0, 28), BackgroundColor3 = option == selected and C.purple or C.card, BorderSizePixel = 0, Text = " " .. tostring(option), TextColor3 = C.text, Font = Enum.Font.Gotham, TextSize = 10, TextXAlignment = Enum.TextXAlignment.Left, AutoButtonColor = false}, list) corner(item, 6) item.MouseButton1Click:Connect(function() selected = option callback(option) build() close() end) end end local function open() if OpenDropdown and OpenDropdown ~= api then OpenDropdown:Close() end OpenDropdown, opened = api, true build() local height = math.min(#values, 6) * 31 + 8 list.Size, list.Visible = UDim2.new(1, -24, 0, height), true selector.Text = " " .. selected .. " ^" tween(row, {Size = UDim2.new(1, -3, 0, 53 + height)}) end selector.MouseButton1Click:Connect(function() if opened then close() else open() end end) function api:Close() close() end function api:Get() return selected end function api:Set(value, fire) if table.find(values, value) then selected = value selector.Text = " " .. selected .. " v" if fire ~= false then callback(value) end build() end end function api:Refresh(nextValues, keep) values = table.clone(nextValues) if #values == 0 then values = {"Aucun"} end if not keep or not table.find(values, selected) then selected = values[1] callback(selected) end selector.Text = " " .. selected .. " v" build() close() end build() return api end local function slider(parent, title, minimum, maximum, default, suffix, callback) local value, dragging = default, false local row = new("Frame", {Size = UDim2.new(1, -3, 0, 59), BackgroundColor3 = C.card, BorderSizePixel = 0}, parent) corner(row, 10) new("TextLabel", {Size = UDim2.new(.65, 0, 0, 24), Position = UDim2.new(0, 12, 0, 6), BackgroundTransparency = 1, Text = title, TextColor3 = C.text, Font = Enum.Font.GothamMedium, TextSize = 12, TextXAlignment = Enum.TextXAlignment.Left}, row) local valueLabel = new("TextLabel", {Size = UDim2.new(.3, -12, 0, 24), Position = UDim2.new(.7, 0, 0, 6), BackgroundTransparency = 1, Text = tostring(value) .. suffix, TextColor3 = C.pink, Font = Enum.Font.GothamBold, TextSize = 10, TextXAlignment = Enum.TextXAlignment.Right}, row) local bar = new("TextButton", {Size = UDim2.new(1, -24, 0, 6), Position = UDim2.new(0, 12, 0, 41), BackgroundColor3 = C.bg, BorderSizePixel = 0, Text = "", AutoButtonColor = false}, row) corner(bar, 3) local fill = new("Frame", {Size = UDim2.new((value - minimum) / (maximum - minimum), 0, 1, 0), BackgroundColor3 = C.purple, BorderSizePixel = 0}, bar) corner(fill, 3) local function update(inputObject) local alpha = math.clamp((inputObject.Position.X - bar.AbsolutePosition.X) / bar.AbsoluteSize.X, 0, 1) value = math.floor((minimum + (maximum - minimum) * alpha) * 100 + .5) / 100 fill.Size = UDim2.new(alpha, 0, 1, 0) valueLabel.Text = tostring(value) .. suffix callback(value) end bar.InputBegan:Connect(function(inputObject) if inputObject.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true update(inputObject) end end) UIS.InputChanged:Connect(function(inputObject) if dragging and inputObject.UserInputType == Enum.UserInputType.MouseMovement then update(inputObject) end end) UIS.InputEnded:Connect(function(inputObject) if inputObject.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) end local Home, Rolls, Potions = page("Dashboard"), page("Rolls & Des"), page("Potions") local Shop, Wheel, Pets, Settings = page("Boutiques"), page("Roue"), page("Pets"), page("Reglages") local Status = label(Home, "ALCHIMISTE HUB", "Pret. Les donnees du jeu seront synchronisees automatiquement.") button(Home, "Actualiser le statut", function() local dk, dt, pk, pt = 0, 0, 0, 0 for _, n in pairs(S.dice) do dk += 1 dt += tonumber(n) or 0 end for _, d in pairs(S.potions) do pk += 1 if type(d) == "table" then pt += tonumber(d.Owned) or 0 end end local names = {"Open", "ClaimRoll", "EquipBest", "Wheel", "UsePotion", "BuyDice", "BuyPotion", "Sell", "Hatch"} local found = 0 for _, name in ipairs(names) do if remote(name) then found += 1 end end Status.Text = string.format("Remotes: %d/%d | Des: %d/%d | Potions: %d/%d | Gain: %s", found, #names, dk, dt, pk, pt, S.cash) end) button(Home, "Claim roll rapide", function() local ok, e = call("ClaimRoll", 0, 1) notify(ok and "Roll reclame" or e) end) button(Home, "Equip Best rapide", function() local ok, e = call("EquipBest") notify(ok and "Equip Best envoye" or e) end) local DiceDropdown local function diceOptions() if S.diceFilter == "Tous" then return AllDice end local options = {} for name, amount in pairs(S.dice) do if (tonumber(amount) or 0) > 0 then table.insert(options, name) end end table.sort(options) return #options > 0 and options or {"Basic"} end dropdown(Rolls, "Afficher les des", {"Tous", "Possedes"}, "Tous", function(value) S.diceFilter = value if DiceDropdown then DiceDropdown:Refresh(diceOptions(), true) end end) DiceDropdown = dropdown(Rolls, "De a ouvrir", AllDice, "Basic", function(value) S.die = value end) dropdown(Rolls, "Quantite", {"1", "2", "3", "5", "10"}, "1", function(value) S.amount = tonumber(value) or 1 end) button(Rolls, "Ouvrir maintenant", function() local ok, e = call("Open", S.die, S.amount, false) notify(ok and "Ouverture envoyee" or e) end) button(Rolls, "Claim roll", function() local ok, e = call("ClaimRoll", 0, 1) notify(ok and "Roll reclame" or e) end) toggle(Rolls, "Auto open", "autoOpen") toggle(Rolls, "Auto claim roll", "autoClaim") local function usePotion(name, amount) if not name or name == "Aucun" then return false, "Aucune potion selectionnee" end local ok, result = call("UsePotion", "Equip", name) if not ok then return false, result end task.wait(.08) return call("UsePotion", "Use", name, amount or "Max") end local function usePotions() local count = 0 for name, data in pairs(S.potions) do if type(data) == "table" and (tonumber(data.Owned) or 0) > 0 and not data.Active then if usePotion(name, "Max") then count += 1 end task.wait(.12) end end return count end local PotionDropdown local function potionOptions() if S.potionFilter == "Tous" then return AllPotions end local options = {} for name, data in pairs(S.potions) do if type(data) == "table" and (tonumber(data.Owned) or 0) > 0 then table.insert(options, name) end end table.sort(options) return #options > 0 and options or {"Luck I"} end dropdown(Potions, "Afficher les potions", {"Tous", "Possedees"}, "Tous", function(value) S.potionFilter = value if PotionDropdown then PotionDropdown:Refresh(potionOptions(), true) end end) PotionDropdown = dropdown(Potions, "Potion", AllPotions, "Luck I", function(value) S.potion = value end) dropdown(Potions, "Quantite", {"1", "5", "10", "Max"}, "Max", function(value) S.potionAmount = value == "Max" and "Max" or tonumber(value) end) button(Potions, "Utiliser la potion selectionnee", function() local ok, e = usePotion(S.potion, S.potionAmount) notify(ok and (S.potion .. " utilisee") or e) end) button(Potions, "Utiliser toutes les potions possedees", function() notify(usePotions() .. " potion(s) traitee(s)") end) button(Potions, "Afficher le stock marchand", function() local rows = {} for name, amount in pairs(S.stock) do table.insert(rows, name .. ": " .. tostring(amount)) end table.sort(rows) while #rows > 5 do table.remove(rows) end notify(#rows > 0 and table.concat(rows, " | ") or "Stock pas encore recu") end) toggle(Potions, "Auto use inventaire", "autoPotion") local DiceShopPos, PotionShopPos, SellShopPos task.spawn(function() local map = workspace:FindFirstChild("Map") local mapShop = map and map:FindFirstChild("MapShop") if not mapShop then return end local function shopPosition(shopName, npcName) local shop = mapShop:FindFirstChild(shopName) local chars = shop and shop:FindFirstChild("Character") local npc = chars and chars:FindFirstChild(npcName) local prompt = npc and npc:FindFirstChild("Prox") return prompt and prompt.Parent:GetPivot().Position or nil end DiceShopPos = shopPosition("Shop", "ShopNpc") PotionShopPos = shopPosition("PotionShop", "PotionNpc") SellShopPos = shopPosition("SellShop", "SellNpc") end) local function getHRP() return LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") end local function runNear(position, callback) local root = getHRP() local oldCFrame = root and root.CFrame if root and position and (root.Position - position).Magnitude > S.maxDistance then root.CFrame = CFrame.new(position + Vector3.new(0, 3, 0)) task.wait(.18) end local ok, result = pcall(callback) if oldCFrame and root and position then task.wait(.1) root.CFrame = oldCFrame end return ok, result end local function buyBestDice() return runNear(DiceShopPos, function() local ok, e = call("BuyDice", "BuyBestAvailable") if not ok then error(e) end end) end local function buyBestPotion() return runNear(PotionShopPos, function() local ok, e = call("BuyPotion", "BuyBestAvailable") if not ok then error(e) end end) end local function sellAll() return runNear(SellShopPos, function() local ok, e = call("Sell", "All") if not ok then error(e) end end) end button(Shop, "Acheter le meilleur de", function() local ok, e = buyBestDice() notify(ok and "Achat de envoye" or e) end) toggle(Shop, "Auto Buy Best Dice", "autoBuyDice") button(Shop, "Acheter la meilleure potion", function() local ok, e = buyBestPotion() notify(ok and "Achat potion envoye" or e) end) toggle(Shop, "Auto Buy Best Potion", "autoBuyPotion") button(Shop, "Sell All maintenant", function() local ok, e = sellAll() notify(ok and "Vente envoyee" or e) end) toggle(Shop, "Auto Sell", "autoSell") button(Wheel, "Get State", function() local ok, v = call("Wheel", "GetState") notify(ok and "Etat de roue recu" or v) end) button(Wheel, "Claim Free", function() local ok, e = call("Wheel", "ClaimFree") notify(ok and "Claim envoye" or e) end) button(Wheel, "Spin", function() local ok, e = call("Wheel", "Spin") notify(ok and "Spin envoye" or e) end) toggle(Wheel, "Auto claim gratuit", "autoWheelClaim") toggle(Wheel, "Auto spin", "autoWheel") button(Pets, "Hatch maintenant", function() local ok, e = call("Hatch") notify(ok and "Hatch envoye" or e) end) toggle(Pets, "Auto Hatch Pets", "autoHatch") button(Pets, "Equip Best", function() local ok, e = call("EquipBest") notify(ok and "Meilleur equipement equipe" or e) end) toggle(Pets, "Auto equip best", "autoEquip") toggle(Pets, "Anti AFK", "antiAfk") slider(Settings, "Delai des actions", .25, 5, .75, " s", function(v) S.delay = v end) slider(Settings, "Distance max sans TP", 10, 100, 30, " studs", function(v) S.maxDistance = v end) button(Settings, "Rafraichir les dropdowns", function() DiceDropdown:Refresh(diceOptions(), true) PotionDropdown:Refresh(potionOptions(), true) notify("Dropdowns actualises") end) label(Settings, "RACCOURCI", "LeftControl affiche ou masque le menu.") button(Settings, "Detruire le hub", function() S.running = false Gui:Destroy() end) local function listen(name, callback) local object = remote(name) if object and object:IsA("RemoteEvent") then object.OnClientEvent:Connect(callback) end end listen("DiceUpdater", function(mode, data) if mode == "Update" and type(data) == "table" then S.dice = data if S.diceFilter == "Possedes" then DiceDropdown:Refresh(diceOptions(), true) end end end) listen("PotionUpdater", function(mode, data) if mode == "Update" and type(data) == "table" then S.potions = data if S.potionFilter == "Possedees" then PotionDropdown:Refresh(potionOptions(), true) end end end) listen("BuyPotion", function(mode, catalog, stock) if mode == "Init" then if type(catalog) == "table" then S.catalog = catalog end if type(stock) == "table" then S.stock = stock end end end) listen("CashGain", function(amount, currency) S.cash = tostring(amount) .. " " .. tostring(currency) end) LP.Idled:Connect(function() if S.antiAfk then VirtualUser:CaptureController() VirtualUser:ClickButton2(Vector2.new()) end end) local dragging, dragStart, startPos Top.InputBegan:Connect(function(inputObject) if inputObject.UserInputType == Enum.UserInputType.MouseButton1 then dragging, dragStart, startPos = true, inputObject.Position, Main.Position end end) UIS.InputChanged:Connect(function(inputObject) if dragging and inputObject.UserInputType == Enum.UserInputType.MouseMovement then local delta = inputObject.Position - dragStart Main.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) Shadow.Position = UDim2.new(Main.Position.X.Scale, Main.Position.X.Offset - 20, Main.Position.Y.Scale, Main.Position.Y.Offset - 20) end end) UIS.InputEnded:Connect(function(inputObject) if inputObject.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) local shown = true local function setShown(value) shown = value Main.Visible, Shadow.Visible = value, value end Minimize.MouseButton1Click:Connect(function() setShown(false) end) Close.MouseButton1Click:Connect(function() S.running = false Gui:Destroy() end) UIS.InputBegan:Connect(function(inputObject, processed) if not processed and inputObject.KeyCode == Enum.KeyCode.LeftControl then setShown(not shown) end end) local due = {} local function ready(key, factor) local now = os.clock() if now < (due[key] or 0) then return false end due[key] = now + S.delay * factor return true end task.spawn(function() while S.running do if S.autoOpen and ready("open", 1) then call("Open", S.die, S.amount, false) end if S.autoClaim and ready("claim", 2) then call("ClaimRoll", 0, 1) end if S.autoBuyDice and ready("buyDice", 2) then buyBestDice() end if S.autoBuyPotion and ready("buyPotion", 2) then buyBestPotion() end if S.autoSell and ready("sell", 3) then sellAll() end if S.autoHatch and ready("hatch", 1) then call("Hatch") end if S.autoEquip and ready("equip", 3) then call("EquipBest") end if S.autoWheelClaim and ready("wheelClaim", 4) then call("Wheel", "ClaimFree") end if S.autoWheel and ready("wheel", 2) then call("Wheel", "Spin") end if S.autoPotion and ready("potion", 5) then usePotions() end task.wait(.1) end end) pages["Dashboard"].Visible = true navButtons["Dashboard"].BackgroundTransparency = 0 navButtons["Dashboard"].TextColor3 = C.text notify("Alchimiste Hub charge")