
Key Required
Amethys Hub
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!

Good script just add a mobile ui opener please
Works, nice scripts.
@q8inty thanks good script btw!