Upload files to "Library"

This commit is contained in:
Apapapa 2025-02-20 02:32:58 +00:00
parent d45e55cf73
commit f35ab94a7f

511
Library/testing2.lua Normal file
View File

@ -0,0 +1,511 @@
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local HttpService = game:GetService("HttpService")
local Players = game:GetService("Players")
local StarterGui = game:GetService("StarterGui")
local JustHub = {}
JustHub.Themes = {
Darker = {
["Color Hub 1"] = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(25,25,25)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(32,32,32)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(25,25,25))
}),
["Color Hub 2"] = Color3.fromRGB(30,30,30),
["Color Stroke"] = Color3.fromRGB(40,40,40),
["Color Theme"] = Color3.fromRGB(88,101,242),
["Color Text"] = Color3.fromRGB(243,243,243),
["Color Dark Text"] = Color3.fromRGB(180,180,180)
},
Dark = {
["Color Hub 1"] = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(40,40,40)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(47,47,47)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(40,40,40))
}),
["Color Hub 2"] = Color3.fromRGB(45,45,45),
["Color Stroke"] = Color3.fromRGB(65,65,65),
["Color Theme"] = Color3.fromRGB(65,150,255),
["Color Text"] = Color3.fromRGB(245,245,245),
["Color Dark Text"] = Color3.fromRGB(190,190,190)
},
Purple = {
["Color Hub 1"] = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(28,25,30)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(32,32,32)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(28,25,30))
}),
["Color Hub 2"] = Color3.fromRGB(30,30,30),
["Color Stroke"] = Color3.fromRGB(40,40,40),
["Color Theme"] = Color3.fromRGB(150,0,255),
["Color Text"] = Color3.fromRGB(240,240,240),
["Color Dark Text"] = Color3.fromRGB(180,180,180)
},
Light = {
["Color Hub 1"] = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(230,230,230)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(245,245,245)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(230,230,230))
}),
["Color Hub 2"] = Color3.fromRGB(240,240,240),
["Color Stroke"] = Color3.fromRGB(200,200,200),
["Color Theme"] = Color3.fromRGB(0,120,255),
["Color Text"] = Color3.fromRGB(30,30,30),
["Color Dark Text"] = Color3.fromRGB(80,80,80)
},
Neon = {
["Color Hub 1"] = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(10,10,10)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(0,200,200)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(10,10,10))
}),
["Color Hub 2"] = Color3.fromRGB(15,15,15),
["Color Stroke"] = Color3.fromRGB(0,255,255),
["Color Theme"] = Color3.fromRGB(0,255,0),
["Color Text"] = Color3.fromRGB(255,255,255),
["Color Dark Text"] = Color3.fromRGB(200,200,200)
},
Forest = {
["Color Hub 1"] = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0,50,0)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(0,80,0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(0,50,0))
}),
["Color Hub 2"] = Color3.fromRGB(0,60,0),
["Color Stroke"] = Color3.fromRGB(0,80,0),
["Color Theme"] = Color3.fromRGB(0,120,0),
["Color Text"] = Color3.fromRGB(220,220,220),
["Color Dark Text"] = Color3.fromRGB(160,160,160)
},
Aqua = {
["Color Hub 1"] = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(0,100,100)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(0,150,150)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(0,100,100))
}),
["Color Hub 2"] = Color3.fromRGB(0,110,110),
["Color Stroke"] = Color3.fromRGB(0,180,180),
["Color Theme"] = Color3.fromRGB(0,220,220),
["Color Text"] = Color3.fromRGB(255,255,255),
["Color Dark Text"] = Color3.fromRGB(200,200,200)
}
}
JustHub.Info = {Version = "1.1.0"}
JustHub.Save = {UISize = {550,380}, TabSize = 160, Theme = "Darker"}
JustHub.ConfigData = {}
JustHub.ControlRegistry = {}
local function createInstance(className, properties, parent)
local inst = Instance.new(className)
if properties then
for k, v in pairs(properties) do
inst[k] = v
end
end
if parent then inst.Parent = parent end
return inst
end
local function tweenProperty(object, propertyTable, duration)
local ti = TweenInfo.new(duration, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local tw = TweenService:Create(object, ti, propertyTable)
tw:Play()
return tw
end
local function getCurrentTheme(themeChoice)
if type(themeChoice) == "table" then
return themeChoice
else
return JustHub.Themes[themeChoice or JustHub.Save.Theme]
end
end
local function clampPosition(pos, screenSize)
local x = math.clamp(pos.X.Offset, 0, screenSize.X)
local y = math.clamp(pos.Y.Offset, 0, screenSize.Y)
return UDim2.new(pos.X.Scale, x, pos.Y.Scale, y)
end
local function addBorder(obj, color, thickness)
return createInstance("UIStroke", {Color = color, Thickness = thickness}, obj)
end
-- Control Registry untuk Save/Load
function JustHub:RegisterControl(key, updateFunction)
JustHub.ControlRegistry[key] = updateFunction
end
function JustHub:ApplyConfig(config)
for key, savedValue in pairs(config) do
if JustHub.ControlRegistry[key] then
JustHub.ControlRegistry[key](savedValue)
end
end
end
-- Fungsi pembuatan Window dengan struktur lengkap dan tambahan Username di top bar
function JustHub:CreateWindow(options)
options = options or {}
local windowName = options.Name or "JustHub Window"
local currentTheme = getCurrentTheme(options.Theme)
local windowGUID = HttpService:GenerateGUID(false)
local finalTitle = windowName .. " [" .. windowGUID .. "]"
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local screenGui = createInstance("ScreenGui", {Name = "JustHub", ResetOnSpawn = false}, playerGui)
self.ScreenGui = screenGui
local uiWidth = JustHub.Save.UISize[1]
local uiHeight = JustHub.Save.UISize[2]
local mainFrame = createInstance("Frame", {
Name = "MainFrame",
AnchorPoint = Vector2.new(0.5,0.5),
Position = UDim2.new(0.5,0,-0.5,0),
Size = UDim2.new(0,uiWidth,0,uiHeight),
BackgroundColor3 = currentTheme["Color Hub 2"],
}, screenGui)
createInstance("UICorner", {CornerRadius = UDim.new(0,12)}, mainFrame)
addBorder(mainFrame, currentTheme["Color Stroke"], 2)
createInstance("UIGradient", {Color = currentTheme["Color Hub 1"]}, mainFrame)
local topBar = createInstance("Frame", {Name = "TopBar", Size = UDim2.new(1,0,0,60), BackgroundColor3 = currentTheme["Color Hub 2"]}, mainFrame)
createInstance("UICorner", {CornerRadius = UDim.new(0,12)}, topBar)
local titleLabel = createInstance("TextLabel", {
Name = "TitleLabel",
Size = UDim2.new(1,-180,1,0),
Position = UDim2.new(0,10,0,0),
BackgroundTransparency = 1,
Text = finalTitle,
TextColor3 = currentTheme["Color Text"],
Font = Enum.Font.GothamBold,
TextSize = 18,
TextXAlignment = Enum.TextXAlignment.Left,
}, topBar)
local usernameLabel = createInstance("TextLabel", {
Name = "UsernameLabel",
Size = UDim2.new(0,150,1,0),
Position = UDim2.new(1,-160,0,0),
BackgroundTransparency = 1,
Text = "Welcome, " .. player.Name,
TextColor3 = currentTheme["Color Text"],
Font = Enum.Font.GothamBold,
TextSize = 16,
TextXAlignment = Enum.TextXAlignment.Right,
}, topBar)
local function createControlButton(name, image, pos)
return createInstance("ImageButton", {
Name = name,
Size = UDim2.new(0,40,0,40),
Position = pos,
BackgroundTransparency = 1,
Image = image,
ImageColor3 = currentTheme["Color Theme"],
}, topBar)
end
local hideButton = createControlButton("HideButton", "rbxassetid://1307617803", UDim2.new(1,-110,0,10))
local maxButton = createControlButton("MaxButton", "rbxassetid://1307617941", UDim2.new(1,-70,0,10))
local closeButton = createControlButton("CloseButton", "rbxassetid://3926305904", UDim2.new(1,-30,0,10))
local sidebarWidth = JustHub.Save.TabSize
local sidebar = createInstance("Frame", {
Name = "Sidebar",
Size = UDim2.new(0,sidebarWidth,1,-60),
Position = UDim2.new(0,0,0,60),
BackgroundColor3 = currentTheme["Color Hub 2"],
}, mainFrame)
createInstance("UICorner", {CornerRadius = UDim.new(0,10)}, sidebar)
createInstance("UIListLayout", {
FillDirection = Enum.FillDirection.Vertical,
Padding = UDim.new(0,10),
HorizontalAlignment = Enum.HorizontalAlignment.Center,
VerticalAlignment = Enum.VerticalAlignment.Top,
}, sidebar)
local contentContainer = createInstance("Frame", {
Name = "ContentContainer",
Size = UDim2.new(1,-sidebarWidth,1,-60),
Position = UDim2.new(0,sidebarWidth,0,60),
BackgroundColor3 = currentTheme["Color Hub 2"],
}, mainFrame)
createInstance("UICorner", {CornerRadius = UDim.new(0,10)}, contentContainer)
local scrollingFrame = createInstance("ScrollingFrame", {
Size = UDim2.new(1,0,1,0),
BackgroundTransparency = 1,
ScrollBarThickness = 8,
BorderSizePixel = 0,
}, contentContainer)
createInstance("UIListLayout", {
SortOrder = Enum.SortOrder.LayoutOrder,
Padding = UDim.new(0,10),
}, scrollingFrame)
local fpsLabel = createInstance("TextLabel", {
Name = "FPSLabel",
Size = UDim2.new(0,100,0,20),
Position = UDim2.new(1,-110,1,-30),
BackgroundTransparency = 1,
TextColor3 = currentTheme["Color Text"],
Font = Enum.Font.Gotham,
TextSize = 14,
Text = "FPS: Calculating...",
}, mainFrame)
RunService.Heartbeat:Connect(function(delta)
local fps = math.floor(1/delta)
fpsLabel.Text = "FPS: " .. fps
end)
local tweenInfoIn = TweenInfo.new(0.5, Enum.EasingStyle.Back, Enum.EasingDirection.Out)
local tweenIn = TweenService:Create(mainFrame, tweenInfoIn, {Position = UDim2.new(0.5,0,0.5,0)})
tweenIn:Play()
closeButton.MouseButton1Click:Connect(function()
local tweenInfoOut = TweenInfo.new(0.5, Enum.EasingStyle.Back, Enum.EasingDirection.In)
local tweenOut = TweenService:Create(mainFrame, tweenInfoOut, {Position = UDim2.new(0.5,0,-0.5,0)})
tweenOut:Play()
tweenOut.Completed:Connect(function() screenGui:Destroy() end)
end)
local dragging = false
local dragStart, startPos
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
end
end)
topBar.InputChanged:Connect(function(input)
if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local delta = input.Position - dragStart
local newPos = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
newPos = clampPosition(newPos, Vector2.new(screenGui.AbsoluteSize.X, screenGui.AbsoluteSize.Y))
mainFrame.Position = newPos
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end
end)
print("JustHub Window dibuat.")
local windowObject = {ScreenGui = screenGui, MainFrame = mainFrame, TopBar = topBar, Sidebar = sidebar, ContentContainer = contentContainer, Tabs = {}}
function windowObject:addTab(tabName)
tabName = tabName or "Tab"
local tabButton = createInstance("TextButton", {
Name = tabName.."Button",
Text = tabName,
Size = UDim2.new(1, 0, 0, 30),
BackgroundColor3 = currentTheme["Color Stroke"],
TextColor3 = currentTheme["Color Text"],
Font = Enum.Font.GothamBold,
TextSize = 16,
}, self.Sidebar)
local tabContent = createInstance("Frame", {
Name = tabName.."Content",
Size = UDim2.new(1,0,1,0),
BackgroundTransparency = 1,
Visible = false,
}, scrollingFrame)
local tabObject = {Name = tabName, Button = tabButton, Content = tabContent, Sections = {}}
table.insert(self.Tabs, tabObject)
tabButton.MouseButton1Click:Connect(function()
for _, t in ipairs(self.Tabs) do t.Content.Visible = false end
tabObject.Content.Visible = true
end)
if #self.Tabs == 1 then tabObject.Content.Visible = true end
function tabObject:addSection(sectionName, sectionHeight)
sectionName = sectionName or "Section"
sectionHeight = sectionHeight or 100
local sectionFrame = createInstance("Frame", {
Name = sectionName,
Size = UDim2.new(1, 0, 0, sectionHeight),
BackgroundColor3 = currentTheme["Color Hub 2"],
BackgroundTransparency = 0.2,
}, self.Content)
createInstance("UICorner", {CornerRadius = UDim.new(0,8)}, sectionFrame)
local sectionTitle = createInstance("TextLabel", {
Name = "SectionTitle",
Text = sectionName,
Size = UDim2.new(1,0,0,30),
BackgroundTransparency = 1,
TextColor3 = currentTheme["Color Text"],
Font = Enum.Font.GothamBold,
TextSize = 16,
TextXAlignment = Enum.TextXAlignment.Left,
}, sectionFrame)
local sectionContent = createInstance("Frame", {
Name = "SectionContent",
Size = UDim2.new(1,0,1,-30),
Position = UDim2.new(0,0,0,30),
BackgroundTransparency = 1,
}, sectionFrame)
createInstance("UIListLayout", {
FillDirection = Enum.FillDirection.Vertical,
Padding = UDim.new(0,5),
SortOrder = Enum.SortOrder.LayoutOrder,
}, sectionContent)
local sectionObj = {Frame = sectionFrame, Title = sectionTitle, Content = sectionContent}
table.insert(self.Sections, sectionObj)
function sectionObj:addMenu(menuName)
menuName = menuName or "Menu"
local menuFrame = createInstance("Frame", {
Name = menuName,
Size = UDim2.new(1,0,0,40),
BackgroundColor3 = currentTheme["Color Stroke"],
BackgroundTransparency = 0.3,
}, self.Content)
createInstance("UICorner", {CornerRadius = UDim.new(0,6)}, menuFrame)
createInstance("TextLabel", {
Name = "MenuLabel",
Text = menuName,
Size = UDim2.new(1,0,1,0),
BackgroundTransparency = 1,
TextColor3 = currentTheme["Color Text"],
Font = Enum.Font.GothamBold,
TextSize = 16,
}, menuFrame)
return menuFrame
end
-- Fungsi kontrol lain (addToggle, addSlider, dll.) bisa disisipkan di sini
return sectionObj
end
return tabObject
end
return windowObject
end
-- Fungsi Loading Screen: muncul terlebih dahulu, lalu callback membuat window
function JustHub:ShowLoadingScreen(duration, callback)
duration = duration or 5
callback = callback or function() end
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local loadingGui = createInstance("ScreenGui", {Name = "LoadingScreen", ResetOnSpawn = false, IgnoreGuiInset = true}, playerGui)
local background = createInstance("Frame", {
Size = UDim2.new(1,0,1,0),
Position = UDim2.new(0,0,0,0),
BackgroundColor3 = Color3.new(0,0,0),
BackgroundTransparency = 0.5,
BorderSizePixel = 0,
}, loadingGui)
local titleLabel = createInstance("TextLabel", {
Text = "JustHub Library",
Font = Enum.Font.SourceSansSemibold,
TextSize = 20,
TextColor3 = getCurrentTheme(JustHub.Save.Theme)["Color Text"],
BackgroundTransparency = 1,
Size = UDim2.new(0,200,0,50),
AnchorPoint = Vector2.new(0.5,0.5),
Position = UDim2.new(0.5,0,0.5,-50),
}, loadingGui)
local welcomeLabel = createInstance("TextLabel", {
Text = "Welcome, " .. player.Name,
Font = Enum.Font.SourceSansSemibold,
TextSize = 16,
TextColor3 = getCurrentTheme(JustHub.Save.Theme)["Color Text"],
BackgroundTransparency = 1,
Size = UDim2.new(0,200,0,30),
AnchorPoint = Vector2.new(0.5,0),
Position = UDim2.new(0.5,0,0.5,10),
}, loadingGui)
local progressBarContainer = createInstance("Frame", {
Size = UDim2.new(0.5,0,0,20),
Position = UDim2.new(0.5,0,0.5,50),
AnchorPoint = Vector2.new(0.5,0.5),
BackgroundColor3 = getCurrentTheme(JustHub.Save.Theme)["Color Stroke"],
BackgroundTransparency = 0.5,
BorderSizePixel = 0,
}, loadingGui)
createInstance("UICorner", {CornerRadius = UDim.new(0,4)}, progressBarContainer)
local progressBarFill = createInstance("Frame", {
Size = UDim2.new(0,0,1,0),
BackgroundColor3 = getCurrentTheme(JustHub.Save.Theme)["Color Theme"],
BorderSizePixel = 0,
}, progressBarContainer)
createInstance("UICorner", {CornerRadius = UDim.new(0,4)}, progressBarFill)
local tweenInfo = TweenInfo.new(duration, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local progressTween = TweenService:Create(progressBarFill, tweenInfo, {Size = UDim2.new(1,0,1,0)})
progressTween:Play()
spawn(function()
while progressTween.PlaybackState == Enum.PlaybackState.Playing do
tweenProperty(titleLabel, {TextTransparency = 0.5}, 0.5)
wait(0.5)
tweenProperty(titleLabel, {TextTransparency = 0}, 0.5)
wait(0.5)
end
end)
progressTween.Completed:Connect(function()
wait(0.5)
loadingGui:Destroy()
callback()
end)
end
-- Fungsi InitializeUI: tampilkan loading screen, lalu buat window dan simpan ke JustHub.Window
function JustHub:InitializeUI(options)
self:ShowLoadingScreen(5, function()
local window = self:CreateWindow(options)
self.Window = window -- simpan window untuk diakses kemudian
print("Window dibuat setelah loading screen.")
end)
end
function JustHub:SaveConfig(fileName)
fileName = fileName or "JustHub_Config.json"
if writefile then
local json = HttpService:JSONEncode(JustHub.ConfigData)
writefile(fileName, json)
StarterGui:SetCore("SendNotification", {
Title = "Save Config";
Text = "Config berhasil disimpan ke " .. fileName;
Duration = 5;
})
else
warn("Saving config is not supported in this environment.")
end
end
function JustHub:LoadConfig(fileName)
fileName = fileName or "JustHub_Config.json"
if readfile then
local data = readfile(fileName)
local config = HttpService:JSONDecode(data)
JustHub.ConfigData = config
JustHub:ApplyConfig(config)
StarterGui:SetCore("SendNotification", {
Title = "Load Config";
Text = "Config berhasil dimuat dari " .. fileName;
Duration = 5;
})
return config
else
warn("Loading config is not supported in this environment.")
return {}
end
end
function JustHub:ToggleUIVisibility()
if self.ScreenGui and self.ScreenGui.Parent then
self.ScreenGui.Enabled = not self.ScreenGui.Enabled
end
end
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if not gameProcessed and input.KeyCode and input.KeyCode == Enum.KeyCode.RightShift then
JustHub:ToggleUIVisibility()
end
end)
function JustHub:Notify(options)
options = options or {}
local title = options.Title or ""
local text = options.Message or ""
local duration = options.Duration or 5
local success, errorMessage = pcall(function()
StarterGui:SetCore("SendNotification", {
Title = title;
Text = text;
Duration = duration;
})
end)
if not success then
warn("Gagal mengirim notifikasi: " .. errorMessage)
end
end
return JustHub