Amethys Hub
Key Required

Amethys Hub

Fight For Brainrots [UPD]q8intyq8inty 1.1K views 144 executesUpdated May 1, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•657 lines (26305 chars)
--[[
    ╔══════════════════════════════════════════════════════╗
    ║              AMETHYS HUB — by q8inty                ║
    ║     Fluent UI · Amethyst Theme · Custom Loader      ║
    ╚══════════════════════════════════════════════════════╝
]]

-- ═══════════════════════════════════════════════════════════
-- SERVICES
-- ═══════════════════════════════════════════════════════════
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local Player = Players.LocalPlayer
local PlayerGui = Player:WaitForChild("PlayerGui")

-- ═══════════════════════════════════════════════════════════
-- BRAINROT PET DATABASE
-- ═══════════════════════════════════════════════════════════
local PetDB = {
    Common = {"Lirili Larila","Tim Cheese","Svinina Bombardino","Mateo"},
    Rare = {"Trippi Troppi","Boneca Ambalabu","Cacto Hipopotamo","Tatatata Sahur","Madung"},
    Epic = {"Cappuccino Assassino","Brr Brr Patapim","Bambini Crostini","Bananito Delfinito","Rhino Toasterino","Illuminati"},
    Legendary = {"Chimpanzini Bananini","Burbaloni Loliloli","Balerina Capucina","Tralalero Tralala","Glorbo Fruttodrillo","Odin Din Din Dun","Tralalita Tralala"},
    Mythic = {"Frigo Camelo","Bombardiro Crocodilo","Bombombini Gusini","Pakrahmatmamat","Pakrahmatmatina","Trippi Troppi Troppa Trippa","Orcalero Orcala","Garamararam"},
    Celestial = {"Elefanto Cocofanto","Tung Tung Sahur","La Vacca Saturno Saturnita","Agarrini La Pallini","Los Tralaleritos","Job Job Job Sahur","Karkerkar Kurkur","Pot Hotspot"},
    Secret = {"Esok Sekolah","Chicleteira Bicicleteira","Strawberrelli Flamingelli","Chef Crabracadabra","67","Strawberry Elephant","Brr Bicus Dicus","Fluri Flura","Lerulerulerule","Talpa Di Fero","Trulimero Trulicina"},
    OG = {"Balerino Lololo","Bandito Bobrito","Blueberrinni Octopusini","Cavallo Virtuoso","Espresso Signora","Gangster Footera","Orangutini Ananassini","Pandaccini Bananini","Pipi Kiwi","Pipi Potato","Tigroligre Frutonni","Torrtuginni Dragonfrutini","Zibra Zubra Zibralini","Avocadini Guffo"},
    Exclusive = {"Dragon Cannelloni","Gorillo Watermelondrillo","Girafa Celestre"},
}
local Mutations = {"Normal","Golden","Diamond","Lava","Rainbow","Galaxy"}
local AllRarities = {"Common","Rare","Epic","Legendary","Mythic","Celestial","Secret","OG","Exclusive"}

-- ═══════════════════════════════════════════════════════════
-- STATE
-- ═══════════════════════════════════════════════════════════
local Settings = {
    PetName = "Tung Tung Sahur", Mutation = "Normal", Rarity = "Celestial",
    Reward = 999999999999, Interval = 0.5, GodMode = false,
}
local spamConns, spamEnabled = {}, {}
for _,r in ipairs(AllRarities) do spamEnabled[r] = false end

-- ═══════════════════════════════════════════════════════════
-- CORE FUNCTIONS
-- ═══════════════════════════════════════════════════════════
local function FireReward(pet, rarity, mut, reward)
    local m, rw = mut or Settings.Mutation, reward or Settings.Reward
    pcall(function()
        ReplicatedStorage:WaitForChild("_Net"):WaitForChild("BatchKillReward"):FireServer(
            {[1]={["itemName"]=pet,["mutation"]=m,["rarity"]=rarity,["reward"]=rw}},
            {[1]={["Mutation"]=m,["Name"]=pet,["Rarity"]=rarity}}
        )
    end)
end

local function FireAllOfRarity(rarity)
    for _,pet in ipairs(PetDB[rarity] or {}) do
        FireReward(pet, rarity); task.wait(0.05)
    end
end

local function StopAllSpam()
    for _,r in ipairs(AllRarities) do
        spamEnabled[r] = false
        if spamConns[r] then pcall(task.cancel, spamConns[r]); spamConns[r] = nil end
    end
end

-- Kills Farmer
local killsFarmerConn = nil
local killsFarmerEnabled = false

local function FireKillsFarmer()
    pcall(function()
        ReplicatedStorage:WaitForChild("_Net"):WaitForChild("BatchKillReward"):FireServer(
            {[1]={["itemName"]="0",["mutation"]="0",["rarity"]="0",["reward"]=0}},
            {[1]={["Mutation"]="0",["Name"]="0",["Rarity"]="0"}}
        )
    end)
end

local function StopKillsFarmer()
    killsFarmerEnabled = false
    if killsFarmerConn then pcall(task.cancel, killsFarmerConn); killsFarmerConn = nil end
end

-- God Mode
local godConn = nil
local function SetGodMode(enabled)
    Settings.GodMode = enabled
    if godConn then godConn:Disconnect(); godConn = nil end
    local char = Player.Character
    if not char then return end
    local hum = char:FindFirstChildOfClass("Humanoid")
    if not hum then return end
    if enabled then
        hum.MaxHealth = math.huge
        hum.Health = math.huge
        godConn = hum.HealthChanged:Connect(function()
            if Settings.GodMode then hum.Health = math.huge end
        end)
    else
        hum.MaxHealth = 100
        hum.Health = 100
    end
end

-- Re-apply god mode on respawn
Player.CharacterAdded:Connect(function(char)
    if Settings.GodMode then
        local hum = char:WaitForChild("Humanoid", 10)
        if hum then
            task.wait(0.5)
            SetGodMode(true)
        end
    end
end)

-- ═══════════════════════════════════════════════════════════
-- CUSTOM LOADING ANIMATION
-- ═══════════════════════════════════════════════════════════
local function PlayLoader()
    local gui = Instance.new("ScreenGui")
    gui.Name = "AmethysLoader"; gui.ResetOnSpawn = false
    gui.IgnoreGuiInset = true; gui.DisplayOrder = 999; gui.Parent = PlayerGui

    local bg = Instance.new("Frame")
    bg.Size = UDim2.new(1,0,1,0); bg.BackgroundColor3 = Color3.fromRGB(12,8,20)
    bg.BackgroundTransparency = 1; bg.BorderSizePixel = 0; bg.Parent = gui

    local grad = Instance.new("UIGradient")
    grad.Color = ColorSequence.new({
        ColorSequenceKeypoint.new(0, Color3.fromRGB(25,10,40)),
        ColorSequenceKeypoint.new(0.5, Color3.fromRGB(12,8,20)),
        ColorSequenceKeypoint.new(1, Color3.fromRGB(18,5,30)),
    }); grad.Rotation = 135; grad.Parent = bg

    local center = Instance.new("Frame")
    center.Size = UDim2.new(0,340,0,280); center.Position = UDim2.new(0.5,0,0.5,0)
    center.AnchorPoint = Vector2.new(0.5,0.5); center.BackgroundTransparency = 1; center.Parent = bg

    -- Spinning rings
    local ring1 = Instance.new("ImageLabel")
    ring1.Size = UDim2.new(0,110,0,110); ring1.Position = UDim2.new(0.5,0,0.22,0)
    ring1.AnchorPoint = Vector2.new(0.5,0.5); ring1.BackgroundTransparency = 1
    ring1.ImageTransparency = 1; ring1.Image = "rbxassetid://11326662937"
    ring1.ImageColor3 = Color3.fromRGB(155,89,182); ring1.Parent = center

    local ring2 = ring1:Clone()
    ring2.Size = UDim2.new(0,75,0,75); ring2.ImageColor3 = Color3.fromRGB(192,132,252)
    ring2.Parent = center

    -- Glow dot
    local dot = Instance.new("Frame")
    dot.Size = UDim2.new(0,14,0,14); dot.Position = UDim2.new(0.5,0,0.22,0)
    dot.AnchorPoint = Vector2.new(0.5,0.5); dot.BackgroundColor3 = Color3.fromRGB(192,132,252)
    dot.BackgroundTransparency = 1; dot.BorderSizePixel = 0; dot.Parent = center
    Instance.new("UICorner", dot).CornerRadius = UDim.new(1,0)

    -- Title
    local title = Instance.new("TextLabel")
    title.Size = UDim2.new(1,0,0,34); title.Position = UDim2.new(0.5,0,0.5,0)
    title.AnchorPoint = Vector2.new(0.5,0); title.BackgroundTransparency = 1
    title.Text = "AMETHYS HUB"; title.TextColor3 = Color3.fromRGB(235,235,245)
    title.TextTransparency = 1; title.Font = Enum.Font.GothamBold; title.TextSize = 28; title.Parent = center

    local sub = Instance.new("TextLabel")
    sub.Size = UDim2.new(1,0,0,18); sub.Position = UDim2.new(0.5,0,0.62,0)
    sub.AnchorPoint = Vector2.new(0.5,0); sub.BackgroundTransparency = 1
    sub.Text = "by amthey  •  v2.0"; sub.TextColor3 = Color3.fromRGB(192,132,252)
    sub.TextTransparency = 1; sub.Font = Enum.Font.Gotham; sub.TextSize = 13; sub.Parent = center

    -- Progress bar
    local track = Instance.new("Frame")
    track.Size = UDim2.new(0.7,0,0,4); track.Position = UDim2.new(0.5,0,0.78,0)
    track.AnchorPoint = Vector2.new(0.5,0.5); track.BackgroundColor3 = Color3.fromRGB(35,25,50)
    track.BackgroundTransparency = 1; track.BorderSizePixel = 0; track.Parent = center
    Instance.new("UICorner", track).CornerRadius = UDim.new(1,0)

    local fill = Instance.new("Frame")
    fill.Size = UDim2.new(0,0,1,0); fill.BackgroundColor3 = Color3.fromRGB(155,89,182)
    fill.BorderSizePixel = 0; fill.Parent = track
    Instance.new("UICorner", fill).CornerRadius = UDim.new(1,0)
    local fg = Instance.new("UIGradient")
    fg.Color = ColorSequence.new({
        ColorSequenceKeypoint.new(0, Color3.fromRGB(142,68,173)),
        ColorSequenceKeypoint.new(0.5, Color3.fromRGB(155,89,182)),
        ColorSequenceKeypoint.new(1, Color3.fromRGB(192,132,252)),
    }); fg.Parent = fill

    local status = Instance.new("TextLabel")
    status.Size = UDim2.new(1,0,0,16); status.Position = UDim2.new(0.5,0,0.86,0)
    status.AnchorPoint = Vector2.new(0.5,0); status.BackgroundTransparency = 1
    status.Text = "Loading..."; status.TextColor3 = Color3.fromRGB(140,130,160)
    status.TextTransparency = 1; status.Font = Enum.Font.Gotham; status.TextSize = 11; status.Parent = center

    -- Particles
    local particles = {}
    for i = 1, 10 do
        local p = Instance.new("Frame")
        p.Size = UDim2.new(0, math.random(2,4), 0, math.random(2,4))
        p.Position = UDim2.new(math.random()*0.8+0.1, 0, math.random()*0.8+0.1, 0)
        p.BackgroundColor3 = Color3.fromRGB(192,132,252); p.BackgroundTransparency = 1
        p.BorderSizePixel = 0; p.Parent = bg
        Instance.new("UICorner", p).CornerRadius = UDim.new(1,0)
        particles[i] = p
    end

    -- ANIMATE
    local ti = TweenInfo.new
    local fadeIn = ti(0.5, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)

    TweenService:Create(bg, fadeIn, {BackgroundTransparency=0}):Play()
    TweenService:Create(ring1, fadeIn, {ImageTransparency=0.15}):Play()
    TweenService:Create(ring2, fadeIn, {ImageTransparency=0.25}):Play()
    TweenService:Create(dot, fadeIn, {BackgroundTransparency=0}):Play()
    TweenService:Create(title, fadeIn, {TextTransparency=0}):Play()
    TweenService:Create(sub, fadeIn, {TextTransparency=0.3}):Play()
    TweenService:Create(track, fadeIn, {BackgroundTransparency=0}):Play()
    TweenService:Create(status, fadeIn, {TextTransparency=0.4}):Play()
    for _,p in ipairs(particles) do
        task.delay(math.random()*0.3, function()
            TweenService:Create(p, ti(0.4), {BackgroundTransparency=math.random(50,80)/100}):Play()
        end)
    end

    task.wait(0.3)

    -- Spin
    local angle = 0
    local spin = RunService.RenderStepped:Connect(function(dt)
        angle = angle + dt * 100
        ring1.Rotation = angle; ring2.Rotation = -angle * 1.4
    end)

    -- Pulse dot
    local pulse = TweenService:Create(dot,
        ti(0.7, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1, true),
        {Size = UDim2.new(0,22,0,22), BackgroundTransparency = 0.3}
    ); pulse:Play()

    -- Drift particles
    for _,p in ipairs(particles) do
        TweenService:Create(p, ti(math.random(20,35)/10, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1, true),
            {Position = UDim2.new(p.Position.X.Scale + math.random(-4,4)/100, 0, p.Position.Y.Scale + math.random(-4,4)/100, 0)}
        ):Play()
    end

    -- Progress fill
    local msgs = {"Initializing...","Loading modules...","Preparing pets...","Connecting...","Almost ready...","Launching..."}
    TweenService:Create(fill, ti(2.2, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut), {Size = UDim2.new(1,0,1,0)}):Play()

    for i, msg in ipairs(msgs) do
        task.delay((2.2/#msgs) * (i-1), function()
            local fo = TweenService:Create(status, ti(0.1), {TextTransparency=1}); fo:Play(); fo.Completed:Wait()
            status.Text = msg
            TweenService:Create(status, ti(0.1), {TextTransparency=0.4}):Play()
        end)
    end

    task.wait(2.6)

    -- Fade out
    spin:Disconnect(); pulse:Cancel()
    local fadeOut = ti(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.In)
    for _,obj in ipairs({bg, ring1, ring2, dot, title, sub, track, fill, status}) do
        if obj:IsA("TextLabel") then TweenService:Create(obj, fadeOut, {TextTransparency=1}):Play()
        elseif obj:IsA("ImageLabel") then TweenService:Create(obj, fadeOut, {ImageTransparency=1}):Play()
        else TweenService:Create(obj, fadeOut, {BackgroundTransparency=1}):Play() end
    end
    for _,p in ipairs(particles) do TweenService:Create(p, fadeOut, {BackgroundTransparency=1}):Play() end
    task.wait(0.5); gui:Destroy()
end

-- ═══════════════════════════════════════════════════════════
-- PLAY LOADER THEN INIT UI
-- ═══════════════════════════════════════════════════════════
PlayLoader()

-- ═══════════════════════════════════════════════════════════
-- LOAD FLUENT UI
-- ═══════════════════════════════════════════════════════════
local Fluent = loadstring(game:HttpGet("https://github.com/dawid-scripts/Fluent/releases/latest/download/main.lua"))()
local SaveManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/SaveManager.lua"))()
local InterfaceManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/InterfaceManager.lua"))()

local Window = Fluent:CreateWindow({
    Title = "Amethys Hub",
    SubTitle = "by amthey  •  v2.0",
    TabWidth = 160,
    Size = UDim2.fromOffset(620, 480),
    Acrylic = true,
    Theme = "Amethyst",
    MinimizeKey = Enum.KeyCode.RightControl
})

local Options = Fluent.Options

-- ═══════════════════════════════════════════════════════════
-- TABS
-- ═══════════════════════════════════════════════════════════
local Tabs = {
    Main     = Window:AddTab({ Title = "Main",      Icon = "home" }),
    Pets     = Window:AddTab({ Title = "Pets",       Icon = "star" }),
    AutoFarm = Window:AddTab({ Title = "Auto Farm",  Icon = "repeat" }),
    Player   = Window:AddTab({ Title = "Player",     Icon = "user" }),
    Settings = Window:AddTab({ Title = "Settings",   Icon = "settings" }),
}

-- ═══════════════════════════════════════════════════════════
-- MAIN TAB
-- ═══════════════════════════════════════════════════════════
Tabs.Main:AddParagraph({
    Title = "💎 Amethys Hub",
    Content = "Premium brainrot pet script by amthey.\nUse the tabs to give pets, auto-farm, or modify your player."
})

Tabs.Main:AddDropdown("MutationDrop", {
    Title = "Mutation",
    Description = "Applied to all pet gives & spam",
    Values = Mutations,
    Default = "Normal",
})
Options.MutationDrop:OnChanged(function(val) Settings.Mutation = val end)

Tabs.Main:AddSlider("RewardSlider", {
    Title = "Reward Amount",
    Description = "Coins per BatchKillReward fire",
    Default = 999999999999, Min = 1, Max = 999999999999, Rounding = 0,
    Callback = function(v) Settings.Reward = v end,
})

Tabs.Main:AddSlider("IntervalSlider", {
    Title = "Spam Interval",
    Description = "Delay between auto-fire loops (seconds)",
    Default = 0.5, Min = 0.1, Max = 10, Rounding = 1,
    Callback = function(v) Settings.Interval = v end,
})

Tabs.Main:AddInput("CustomPet", {
    Title = "Custom Pet Name",
    Default = Settings.PetName,
    Placeholder = "Pet name...",
    Callback = function(v) Settings.PetName = v end,
})

Tabs.Main:AddInput("CustomRarity", {
    Title = "Custom Rarity",
    Default = Settings.Rarity,
    Placeholder = "Rarity...",
    Callback = function(v) Settings.Rarity = v end,
})

Tabs.Main:AddButton({
    Title = "🚀 Fire Custom Pet",
    Description = "One-shot fire with current settings",
    Callback = function()
        FireReward(Settings.PetName, Settings.Rarity)
        Fluent:Notify({Title="Fired!",Content=Settings.PetName.." ("..Settings.Rarity..")",Duration=2})
    end,
})

Tabs.Main:AddParagraph({ Title = "━━ Index Completer ━━", Content = "Fires every pet × every mutation × every rarity to fill your entire collection index." })

Tabs.Main:AddButton({
    Title = "📖 Complete Index",
    Description = "Gives ALL 66 pets in ALL 6 mutations (may take a moment)",
    Callback = function()
        Fluent:Notify({Title="Index Completer",Content="Starting... this will take a moment.",Duration=3})
        task.spawn(function()
            local total = 0
            for _, rarity in ipairs(AllRarities) do
                for _, pet in ipairs(PetDB[rarity] or {}) do
                    for _, mut in ipairs(Mutations) do
                        FireReward(pet, rarity, mut, Settings.Reward)
                        total = total + 1
                        task.wait(0.05)
                    end
                end
            end
            Fluent:Notify({Title="Index Complete!",Content="Fired "..total.." entries across all pets & mutations.",Duration=5})
        end)
    end,
})

Tabs.Main:AddButton({
    Title = "📋 Get Item Index",
    Description = "Invokes GetItemIndex remote and prints result",
    Callback = function()
        local success, result = pcall(function()
            return ReplicatedStorage:WaitForChild("_Net"):WaitForChild("GetItemIndex"):InvokeServer()
        end)
        if success then
            print("[Amethys Hub] Item Index:", result)
            Fluent:Notify({Title="Item Index",Content="Index data printed to console (F9).",Duration=3})
        else
            warn("[Amethys Hub] GetItemIndex failed:", result)
            Fluent:Notify({Title="Error",Content="Failed to get index: "..tostring(result),Duration=3})
        end
    end,
})

-- ═══════════════════════════════════════════════════════════
-- PETS TAB — give buttons for every brainrot pet
-- ═══════════════════════════════════════════════════════════
for _, rarity in ipairs(AllRarities) do
    local pets = PetDB[rarity]
    if pets and #pets > 0 then
        Tabs.Pets:AddParagraph({ Title = "━━ " .. rarity .. " (" .. #pets .. ") ━━", Content = "" })
        for _, petName in ipairs(pets) do
            Tabs.Pets:AddButton({
                Title = "Give: " .. petName,
                Description = rarity,
                Callback = function()
                    FireReward(petName, rarity)
                    Fluent:Notify({Title="Given!",Content=petName.." ("..rarity..")",Duration=1.5})
                end,
            })
        end
    end
end

-- ═══════════════════════════════════════════════════════════
-- AUTO FARM TAB — per-rarity spam toggles
-- ═══════════════════════════════════════════════════════════
Tabs.AutoFarm:AddParagraph({
    Title = "⚡ Auto Farm",
    Content = "Toggle each rarity to spam-fire all its pets continuously.\nUses the mutation & reward from the Main tab."
})

for i, rarity in ipairs(AllRarities) do
    local count = PetDB[rarity] and #PetDB[rarity] or 0
    Tabs.AutoFarm:AddToggle("Spam_"..rarity, {
        Title = "Spam " .. rarity .. " (" .. count .. " pets)",
        Default = false,
    })
    Options["Spam_"..rarity]:OnChanged(function(val)
        spamEnabled[rarity] = val
        if val then
            spamConns[rarity] = task.spawn(function()
                while spamEnabled[rarity] do
                    FireAllOfRarity(rarity); task.wait(Settings.Interval)
                end
            end)
        else
            if spamConns[rarity] then pcall(task.cancel, spamConns[rarity]); spamConns[rarity] = nil end
        end
    end)
end

Tabs.AutoFarm:AddToggle("SpamALL", {
    Title = "⚡ SPAM ALL RARITIES",
    Default = false,
})
Options.SpamALL:OnChanged(function(val)
    for _, rarity in ipairs(AllRarities) do
        spamEnabled[rarity] = val
        if val then
            if not spamConns[rarity] then
                spamConns[rarity] = task.spawn(function()
                    while spamEnabled[rarity] do FireAllOfRarity(rarity); task.wait(Settings.Interval) end
                end)
            end
        else
            if spamConns[rarity] then pcall(task.cancel, spamConns[rarity]); spamConns[rarity] = nil end
        end
    end
end)

Tabs.AutoFarm:AddButton({
    Title = "🛑 Emergency Stop All",
    Description = "Immediately stops all spam loops",
    Callback = function()
        StopAllSpam()
        StopKillsFarmer()
        Fluent:Notify({Title="Stopped",Content="All spam loops stopped.",Duration=2})
    end,
})

Tabs.AutoFarm:AddParagraph({ Title = "━━ Kills Farmer ━━", Content = "Spam zero-value rewards to farm kill count fast." })

Tabs.AutoFarm:AddToggle("KillsFarmer", {
    Title = "🔪 Kills Farmer",
    Description = "Fires BatchKillReward with 0 values every 0.1s to farm kills",
    Default = false,
})
Options.KillsFarmer:OnChanged(function(val)
    killsFarmerEnabled = val
    if val then
        killsFarmerConn = task.spawn(function()
            while killsFarmerEnabled do
                FireKillsFarmer()
                task.wait(0.1)
            end
        end)
    else
        StopKillsFarmer()
    end
end)

-- ═══════════════════════════════════════════════════════════
-- PLAYER TAB
-- ═══════════════════════════════════════════════════════════
Tabs.Player:AddParagraph({ Title = "🎮 Player Mods", Content = "Modify your character's properties." })

Tabs.Player:AddToggle("GodMode", {
    Title = "God Mode",
    Description = "Infinite health — survives respawns",
    Default = false,
})
Options.GodMode:OnChanged(function(val) SetGodMode(val) end)

Tabs.Player:AddSlider("WalkSpeed", {
    Title = "Walk Speed",
    Default = 16, Min = 16, Max = 500, Rounding = 0,
    Callback = function(v)
        local c = Player.Character; if c then local h = c:FindFirstChildOfClass("Humanoid"); if h then h.WalkSpeed = v end end
    end,
})

Tabs.Player:AddSlider("JumpPower", {
    Title = "Jump Power",
    Default = 50, Min = 50, Max = 1000, Rounding = 0,
    Callback = function(v)
        local c = Player.Character; if c then local h = c:FindFirstChildOfClass("Humanoid"); if h then h.JumpPower = v end end
    end,
})

Tabs.Player:AddToggle("AntiAFK", {
    Title = "Anti-AFK",
    Description = "Prevents idle kick",
    Default = false,
})
Options.AntiAFK:OnChanged(function(val)
    if val then
        local VU = game:GetService("VirtualUser")
        Player.Idled:Connect(function() VU:CaptureController(); VU:ClickButton2(Vector2.new()) end)
    end
end)

Tabs.Player:AddButton({
    Title = "Rejoin Server",
    Callback = function() game:GetService("TeleportService"):Teleport(game.PlaceId, Player) end,
})

-- ═══════════════════════════════════════════════════════════
-- SETTINGS TAB — SaveManager + InterfaceManager
-- ═══════════════════════════════════════════════════════════
SaveManager:SetLibrary(Fluent)
InterfaceManager:SetLibrary(Fluent)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({})
InterfaceManager:SetFolder("AmethysHub")
SaveManager:SetFolder("AmethysHub/config")
InterfaceManager:BuildInterfaceSection(Tabs.Settings)
SaveManager:BuildConfigSection(Tabs.Settings)

-- ═══════════════════════════════════════════════════════════
-- MOBILE UI TOGGLE
-- ═══════════════════════════════════════════════════════════
local UserInputService = game:GetService("UserInputService")

local MobileGui = Instance.new("ScreenGui")
MobileGui.Name = "AmethysMobileToggle"
MobileGui.ResetOnSpawn = false
MobileGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
MobileGui.Parent = PlayerGui

local ToggleButton = Instance.new("ImageButton")
ToggleButton.Name = "ToggleButton"
ToggleButton.Size = UDim2.new(0, 45, 0, 45)
ToggleButton.Position = UDim2.new(0.5, -22, 0, 15)
ToggleButton.BackgroundColor3 = Color3.fromRGB(15, 15, 20)
ToggleButton.BorderSizePixel = 0
ToggleButton.Image = "rbxassetid://11326662937"
ToggleButton.ImageColor3 = Color3.fromRGB(192, 132, 252)
ToggleButton.Parent = MobileGui

local ToggleCorner = Instance.new("UICorner")
ToggleCorner.CornerRadius = UDim.new(1, 0)
ToggleCorner.Parent = ToggleButton

local ToggleStroke = Instance.new("UIStroke")
ToggleStroke.Color = Color3.fromRGB(155, 89, 182)
ToggleStroke.Thickness = 2
ToggleStroke.Parent = ToggleButton

-- Dragging logic
local dragging, dragInput, dragStart, startPos
local isDragging = false

ToggleButton.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        dragging = true
        isDragging = false
        dragStart = input.Position
        startPos = ToggleButton.Position
        
        input.Changed:Connect(function()
            if input.UserInputState == Enum.UserInputState.End then
                dragging = false
            end
        end)
    end
end)

ToggleButton.InputChanged:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
        dragInput = input
        if dragging and (input.Position - dragStart).Magnitude > 5 then
            isDragging = true
        end
    end
end)

UserInputService.InputChanged:Connect(function(input)
    if input == dragInput and dragging then
        local delta = input.Position - dragStart
        ToggleButton.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
    end
end)

-- Toggle logic
ToggleButton.MouseButton1Click:Connect(function()
    if not isDragging then
        local vim = game:GetService("VirtualInputManager")
        vim:SendKeyEvent(true, Enum.KeyCode.RightControl, false, game)
        vim:SendKeyEvent(false, Enum.KeyCode.RightControl, false, game)
    end
end)

Tabs.Settings:AddButton({
    Title = "🗑️ Destroy UI",
    Description = "Stop everything and remove the interface",
    Callback = function()
        StopAllSpam(); StopKillsFarmer(); SetGodMode(false); if MobileGui then MobileGui:Destroy() end; Fluent:Destroy()
    end,
})

-- ═══════════════════════════════════════════════════════════
-- FINALIZE
-- ═══════════════════════════════════════════════════════════
Window:SelectTab(1)

Fluent:Notify({
    Title = "Amethys Hub",
    Content = "Loaded successfully! Made by amthey 💎",
    Duration = 5
})

SaveManager:LoadAutoloadConfig()

-- Force Amethyst theme always (overrides saved theme)
Fluent:SetTheme("Amethyst")

Features & Information

VIBE CODED!
#VibeCoded

Community Comments (3)

zilczilcMay 1, 2026

Good script just add a mobile ui opener please

HandigeHasanHandigeHasanMay 3, 2026

Works, nice scripts.

zilczilcMay 3, 2026

@q8inty thanks good script btw!