Tt
--// P E E X H U B - AUTO DETECT VISUAL PET HUB
--// CLIENT ONLY | SAFE | MODERN UI | NO HARDCODE PETS
local Players = game:GetService("Players")
local UIS = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local player = Players.LocalPlayer
local gui = Instance.new("ScreenGui", player.PlayerGui)
gui.Name = "PeexHubGUI"
gui.ResetOnSpawn = false
--------------------------------------------------
-- UTIL
--------------------------------------------------
local function corner(o,r)
Instance.new("UICorner",o).CornerRadius = UDim.new(0,r)
end
local function tween(o,t,p)
TweenService:Create(o,TweenInfo.new(t,Enum.EasingStyle.Quint,Enum.EasingDirection.Out),p):Play()
end
--------------------------------------------------
-- SPLASH
--------------------------------------------------
local splash = Instance.new("Frame",gui)
splash.Size = UDim2.fromOffset(240,140)
splash.Position = UDim2.fromScale(0.5,0.45)
splash.AnchorPoint = Vector2.new(0.5,0.5)
splash.BackgroundColor3 = Color3.fromRGB(15,18,26)
corner(splash,16)
local logo = Instance.new("ImageLabel",splash)
logo.Image = "rbxassetid://7229442422"
logo.Size = UDim2.fromOffset(64,64)
logo.Position = UDim2.fromScale(0.5,-0.4)
logo.AnchorPoint = Vector2.new(0.5,0.5)
logo.BackgroundTransparency = 1
local text = Instance.new("TextLabel",splash)
text.Text = "PeexHub"
text.Font = Enum.Font.GothamBlack
text.TextSize = 18
text.Position = UDim2.fromScale(0.5,0.75)
text.AnchorPoint = Vector2.new(0.5,0.5)
text.BackgroundTransparency = 1
TweenService:Create(logo,TweenInfo.new(0.9,Enum.EasingStyle.Bounce),{
Position = UDim2.fromScale(0.5,0.35)
}):Play()
task.spawn(function()
local h = 0
while splash.Parent do
h = (h + 2) % 360
text.TextColor3 = Color3.fromHSV(h/360,1,1)
task.wait(0.04)
end
end)
task.wait(1.3)
tween(splash,0.4,{BackgroundTransparency=1})
tween(logo,0.4,{ImageTransparency=1})
tween(text,0.4,{TextTransparency=1})
task.wait(0.4)
splash:Destroy()
--------------------------------------------------
-- MAIN WINDOW
--------------------------------------------------
local main = Instance.new("Frame",gui)
main.Size = UDim2.fromOffset(520,300)
main.Position = UDim2.fromScale(0.5,0.5)
main.AnchorPoint = Vector2.new(0.5,0.5)
main.BackgroundColor3 = Color3.fromRGB(18,22,30)
corner(main,18)
local stroke = Instance.new("UIStroke",main)
stroke.Thickness = 2
task.spawn(function()
local h = 0
while main.Parent do
h = (h+1)%360
stroke.Color = Color3.fromHSV(h/360,1,1)
task.wait(0.04)
end
end)
--------------------------------------------------
-- HEADER
--------------------------------------------------
local header = Instance.new("Frame",main)
header.Size = UDim2.new(1,0,0,42)
header.BackgroundTransparency = 1
local title = Instance.new("TextLabel",header)
title.Text = "PeexHub"
title.Font = Enum.Font.GothamBlack
title.TextSize = 18
title.Position = UDim2.fromOffset(14,0)
title.Size = UDim2.new(1,-100,1,0)
title.BackgroundTransparency = 1
task.spawn(function()
local h=0
while title.Parent do
h=(h+2)%360
title.TextColor3 = Color3.fromHSV(h/360,1,1)
task.wait(0.05)
end
end)
--------------------------------------------------
-- BUTTONS
--------------------------------------------------
local function topBtn(txt,x)
local b = Instance.new("TextButton",header)
b.Text = txt
b.Size = UDim2.fromOffset(28,28)
b.Position = UDim2.fromOffset(x,7)
b.Font = Enum.Font.GothamBold
b.TextSize = 14
b.BackgroundColor3 = Color3.fromRGB(40,45,60)
b.TextColor3 = Color3.new(1,1,1)
corner(b,8)
return b
end
local minBtn = topBtn("-", main.Size.X.Offset-70)
local closeBtn = topBtn("X", main.Size.X.Offset-36)
closeBtn.MouseButton1Click:Connect(function() gui:Destroy() end)
--------------------------------------------------
-- DRAG
--------------------------------------------------
do
local drag=false
local startPos, dragStart
header.InputBegan:Connect(function(i)
if i.UserInputType==Enum.UserInputType.MouseButton1 or i.UserInputType==Enum.UserInputType.Touch then
drag=true
dragStart=i.Position
startPos=main.Position
end
end)
UIS.InputChanged:Connect(function(i)
if drag and (i.UserInputType==Enum.UserInputType.MouseMovement or i.UserInputType==Enum.UserInputType.Touch) then
local d=i.Position-dragStart
main.Position=UDim2.new(startPos.X.Scale,startPos.X.Offset+d.X,startPos.Y.Scale,startPos.Y.Offset+d.Y)
end
end)
UIS.InputEnded:Connect(function(i)
if i.UserInputType==Enum.UserInputType.MouseButton1 or i.UserInputType==Enum.UserInputType.Touch then
drag=false
end
end)
end
--------------------------------------------------
-- MINIMIZE BUBBLE
--------------------------------------------------
local bubble = Instance.new("ImageButton",gui)
bubble.Image = "rbxassetid://7229442422"
bubble.Size = UDim2.fromOffset(60,60)
bubble.Position = UDim2.fromScale(0.5,0.8)
bubble.AnchorPoint = Vector2.new(0.5,0.5)
bubble.Visible=false
bubble.BackgroundColor3=Color3.fromRGB(20,20,30)
corner(bubble,30)
minBtn.MouseButton1Click:Connect(function()
main.Visible=false
bubble.Visible=true
end)
bubble.MouseButton1Click:Connect(function()
bubble.Visible=false
main.Visible=true
end)
--------------------------------------------------
-- CONTENT
--------------------------------------------------
local scroll = Instance.new("ScrollingFrame",main)
scroll.Position = UDim2.fromOffset(14,50)
scroll.Size = UDim2.new(1,-28,1,-64)
scroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
scroll.CanvasSize = UDim2.new(0,0,0,0)
scroll.ScrollBarImageTransparency=0.6
scroll.BackgroundTransparency=1
local layout = Instance.new("UIListLayout",scroll)
layout.Padding = UDim.new(0,10)
--------------------------------------------------
-- PET DETECTION (AUTO)
--------------------------------------------------
local CachedPets = {}
for _,v in ipairs(game:GetDescendants()) do
if v:IsA("Model") and v:FindFirstChildWhichIsA("BasePart") then
CachedPets[v.Name] = v
end
end
--------------------------------------------------
-- VISUAL PET SYSTEM
--------------------------------------------------
local VisualPets = {}
local function applyMutation(model,mut)
for _,p in ipairs(model:GetDescendants()) do
if p:IsA("BasePart") then
if mut=="Rainbow" then
p.Material=Enum.Material.Neon
task.spawn(function()
while model.Parent do
p.Color=Color3.fromHSV((tick()*0.3)%1,1,1)
task.wait(0.05)
end
end)
elseif mut=="Golden" then
p.Material=Enum.Material.Metal
p.Color=Color3.fromRGB(255,215,0)
end
end
end
end
local function spawnPet(name,mut)
local src = CachedPets[name]
if not src then return end
local pet = src:Clone()
pet.Parent = workspace
pet.PrimaryPart = pet.PrimaryPart or pet:FindFirstChildWhichIsA("BasePart")
if mut and mut~="" then applyMutation(pet,mut) end
table.insert(VisualPets,pet)
end
RunService.RenderStepped:Connect(function()
local hrp = player.Character and player.Character:FindFirstChild("HumanoidRootPart")
if not hrp then return end
for i,p in ipairs(VisualPets) do
if p.PrimaryPart then
local a = tick()*1.4 + (i*math.pi*2/#VisualPets)
p:PivotTo(hrp.CFrame * CFrame.new(math.cos(a)*3,1.6,math.sin(a)*3))
end
end
end)
--------------------------------------------------
-- AUTO CREATE UI FOR ALL PETS
--------------------------------------------------
for name,_ in pairs(CachedPets) do
local card = Instance.new("Frame",scroll)
card.Size = UDim2.new(1,0,0,68)
card.BackgroundColor3 = Color3.fromRGB(28,33,45)
corner(card,14)
local lbl = Instance.new("TextLabel",card)
lbl.Text = name
lbl.Font = Enum.Font.GothamBold
lbl.TextSize = 14
lbl.TextColor3 = Color3.fromRGB(220,235,255)
lbl.Position = UDim2.fromOffset(12,6)
lbl.Size = UDim2.new(1,-24,0,20)
lbl.BackgroundTransparency=1
local amt = Instance.new("TextBox",card)
amt.Text="1"
amt.Size=UDim2.fromOffset(45,24)
amt.Position=UDim2.fromOffset(12,36)
amt.BackgroundColor3=Color3.fromRGB(40,45,60)
amt.TextColor3=Color3.new(1,1,1)
corner(amt,8)
local mut = Instance.new("TextBox",card)
mut.PlaceholderText="Mutasi (opsional)"
mut.Size=UDim2.fromOffset(140,24)
mut.Position=UDim2.fromOffset(65,36)
mut.BackgroundColor3=Color3.fromRGB(40,45,60)
mut.TextColor3=Color3.new(1,1,1)
corner(mut,8)
local btn = Instance.new("TextButton",card)
btn.Text="VISUAL"
btn.Size=UDim2.fromOffset(80,24)
btn.Position=UDim2.fromOffset(215,36)
btn.BackgroundColor3=Color3.fromRGB(90,120,255)
btn.TextColor3=Color3.new(1,1,1)
corner(btn,10)
btn.MouseButton1Click:Connect(function()
tween(scroll,0.35,{CanvasPosition=Vector2.new(0,card.AbsolutePosition.Y)})
local n = tonumber(amt.Text) or 1
for i=1,math.clamp(n,1,10) do
spawnPet(name,mut.Text)
end
end)
end
Views: 69
Created At: 2025-12-29 10:39:33
Copy the code below to embed this paste: