0% found this document useful (0 votes)
60 views14 pages

Message

The document is a Lua script for a Roblox game that implements a hub called 'Sterling Hub' with various features including auto farming, team selection, and customizable player attributes. It allows users to toggle functionalities, adjust game parameters like speed and power, and automate actions such as jumping and serving. The script also includes configuration management to save and load user settings from a JSON file.

Uploaded by

kanjohattori03
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
60 views14 pages

Message

The document is a Lua script for a Roblox game that implements a hub called 'Sterling Hub' with various features including auto farming, team selection, and customizable player attributes. It allows users to toggle functionalities, adjust game parameters like speed and power, and automate actions such as jumping and serving. The script also includes configuration management to save and load user settings from a JSON file.

Uploaded by

kanjohattori03
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 14

local Luna = loadstring(game:HttpGet("https://paste.

ee/r/WSCKThwW", true))()

local HttpService = game:GetService("HttpService")

local configFile = "SterlingHubHaikyuuConfig.json"

local http = game:GetService("HttpService")


local userId = game.Players.LocalPlayer.UserId

--local blacklist = {1131586622, 1225643250, 1918988070}


--for _, id in pairs(blacklist) do
-- if userId == id then
-- game.Players.LocalPlayer:Kick("Access revoked from using Sterling Hub.")
-- end
--end

local config = {
spikePower = 1,
diveSpeed = 1,
blockPower = 1,
bumpPower = 1,
servePower = 1,
jumpPower = 1,
speed = 1,
setPower = 1,
powerfulServeEnabled = false,
spikeHitbox = 10,
bumpHitbox = 10,
diveHitbox = 10,
setHitbox = 10,
serveHitbox = 10,
blockHitbox = 10,
tiltPower = 1,
jumpsetHitbox = 10,
autoRotate = false
}

-- Load configuration function


local function loadConfig()
if isfile(configFile) then
local data = readfile(configFile)
local success, result = pcall(function()
return game:GetService("HttpService"):JSONDecode(data)
end)
if success then
for k, v in pairs(result) do
config[k] = v -- Update config fields directly
end
end
end
end

local function saveConfig()


local data = game:GetService("HttpService"):JSONEncode(config) -- Encode the
config directly
writefile(configFile, data)
end

-- Save configuration function


local function saveConfig()
local data = game:GetService("HttpService"):JSONEncode(config) -- Encode the
config directly
writefile(configFile, data)
end

-- Auto-load configuration on script start


loadConfig()

local Window = Luna:CreateWindow({


Name = "Sterling Hub",
Subtitle = nil,
LogoID = "90804827107744",
LoadingEnabled = true,
LoadingTitle = "Sterling Hub",
LoadingSubtitle = "by DAN",
ConfigSettings = {
RootFolder = nil,
ConfigFolder = "Sterling Hub"
},
})

Window:CreateHomeTab({
SupportedExecutors = {},
DiscordInvite = "25ms",
Icon = 1,
})

local Tab = Window:CreateTab({


Name = "Auto Farm",
Icon = "agriculture",
ImageSource = "Material",
ShowTitle = true
})

local player = game.Players.LocalPlayer


local humanoid = player.Character:WaitForChild("Humanoid")
local humanoidRootPart = player.Character:WaitForChild("HumanoidRootPart")
local VirtualInputManager = game:GetService("VirtualInputManager")

local isRunning = false -- Tracks the toggle state

-- Functions
local function pressSpace()
VirtualInputManager:SendKeyEvent(true, Enum.KeyCode.Space, false, game)
task.wait(0.1)
VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.Space, false, game)
end

local function pressClick()


VirtualInputManager:SendMouseButtonEvent(0, 0, 0, true, game, 1)
VirtualInputManager:SendMouseButtonEvent(0, 0, 0, false, game, 1)
end

local function getRandomTargetPart()


local positionsFolder = workspace.Map.BallNoCollide.Positions["2"]
local parts = {}
for _, part in ipairs(positionsFolder:GetChildren()) do
if part:IsA("BasePart") then
table.insert(parts, part)
end
end

if #parts > 0 then


return parts[math.random(1, #parts)]
end
return nil
end

local player = game.Players.LocalPlayer


local roundOverStats = player.PlayerGui.Interface.RoundOverStats
local backBtn = roundOverStats.BackBtn
local VirtualInputManager = game:GetService("VirtualInputManager")
local boundaryFolder =
workspace:WaitForChild("Map"):WaitForChild("BallNoCollide"):WaitForChild("Boundarie
s")

local VirtualInputManager = game:GetService("VirtualInputManager")

local function pressEscTwice()


-- First press with delay of 0.3 seconds
task.wait(5)

VirtualInputManager:SendKeyEvent(true, Enum.KeyCode.Escape, false, game) --


Key down
VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.Escape, false, game) --
Key up
task.wait(0.3) -- First delay (adjustable)

-- Second press with delay of 0.7 seconds


VirtualInputManager:SendKeyEvent(true, Enum.KeyCode.Escape, false, game) --
Key down
VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.Escape, false, game) --
Key up
task.wait(0.7) -- Second delay (adjustable)

print("Esc key pressed twice with different delays!")


end

local escPressed = false -- Flag to track if Esc has been pressed

local function checkRoundOverStats()


while true do
-- Check if RoundOverStats is visible
if roundOverStats.Visible then
-- Only press Esc if it hasn't been pressed already
if not escPressed then
pressEscTwice() -- Call pressEscTwice only once when the GUI
becomes visible
escPressed = true -- Set the flag to prevent multiple presses
end
else
-- Reset the flag when the RoundOverStats GUI is hidden
escPressed = false
end
task.wait(0.5) -- Check every 0.5 seconds
end
end

-- Toggle for all functionality


Tab:CreateToggle({
Name = "Auto Farm",
Description = "Toggle Auto Farm",
CurrentValue = false,
Callback = function(Value)
isRunning = Value
print("All functionality is now " .. (Value and "enabled" or "disabled"))
end
})

local function isInsidePart(part, position)


local size = part.Size / 2
local center = part.Position
return math.abs(position.X - center.X) <= size.X
and math.abs(position.Y - center.Y) <= size.Y
and math.abs(position.Z - center.Z) <= size.Z
end

local boundaryFolder =
workspace:WaitForChild("Map"):WaitForChild("BallNoCollide"):WaitForChild("Boundarie
s")

if not boundaryFolder then


warn("Boundary folder not found! Check the path.")
return
end

local ballPrefix = "CLIENT_BALL_"

-- Function to find the ball


local function getBall()
for _, object in pairs(workspace:GetChildren()) do
if object:IsA("Model") and object.Name:match(ballPrefix) then
return object:FindFirstChild("Sphere.001") or
object:FindFirstChild("Cube.001")
end
end
return nil
end

-- Start checking RoundOverStats visibility in parallel


task.spawn(checkRoundOverStats)

task.spawn(function()
while task.wait(0.3) do
if not isRunning then
continue
end

-- Ball tracking logic


local ballPart = getBall()

if ballPart then
-- Move to the ball
humanoid:MoveTo(ballPart.Position)

local distance = (ballPart.Position -


humanoidRootPart.Position).Magnitude

if distance <= 15 then


local targetPart = getRandomTargetPart()
if targetPart then
-- Adjust character to face the target part
local lookVector = (targetPart.Position -
humanoidRootPart.Position).Unit
humanoidRootPart.CFrame = CFrame.new(humanoidRootPart.Position,
humanoidRootPart.Position + lookVector)
end

-- Jump and interact if the ball is above the player


if ballPart.Position.Y > humanoidRootPart.Position.Y + 5 then
pressSpace()
pressClick()
end
end
end
end
end)

-- Declare the player


local player = game.Players.LocalPlayer
local enablejoin = false
local VirtualInputManager = game:GetService("VirtualInputManager")

-- Function to handle team selection (called after the reset)


local function teamSelection()
if not enablejoin then return end

task.wait(10)

-- Check if Team Selection GUI exists and can be accessed


local teamSelectionGui = player.PlayerGui.Interface.TeamSelection
local gameInterface = player.PlayerGui.Interface.Game

-- Only make the team selection GUI visible if the game interface is not yet
visible
if not gameInterface.Visible then
teamSelectionGui.Visible = true
end

while not gameInterface.Visible and enablejoin do


-- Select a random number between 1 and 6
local randomNum = math.random(1, 6)
local button = teamSelectionGui["2"][tostring(randomNum)]

if button and button:IsA("ImageButton") then


local absPos = button.AbsolutePosition
local absSize = button.AbsoluteSize
local clickPosition = absPos + (absSize / 2) -- Center of the button

-- Simulate mouse button down


VirtualInputManager:SendMouseButtonEvent(clickPosition.X,
clickPosition.Y, 0, true, game, 1)
-- Simulate mouse button up
VirtualInputManager:SendMouseButtonEvent(clickPosition.X,
clickPosition.Y, 0, false, game, 1)
end

-- Add a random delay between clicks to simulate human-like behavior


task.wait(math.random(5, 15) / 10) -- Delay between 0.5 and 1.5 seconds
end

-- Hide the team selection GUI when the game GUI becomes visible
if gameInterface.Visible then
teamSelectionGui.Visible = false
end
end

-- Listen for the player's character reset and re-trigger the team selection
player.CharacterAdded:Connect(function(character)
-- If the toggle is on, start the team selection after the reset
if enablejoin then
-- Wait a bit to make sure the character has fully loaded
teamSelection()
end
end)

-- Toggle for Auto Join Match (waiting 30 seconds before starting team selection)
Tab:CreateToggle({
Name = "Auto Join Match",
Description = "Automatically join a match after waiting for 30 seconds(to avoid
getting bugged)",
CurrentValue = false,
Callback = function(Value)
enablejoin = Value
if enablejoin then
-- Wait 30 seconds before starting the team selection
teamSelection()
end
end
})

Tab:CreateSection("Misc")

local autoRotateConnection -- Variable to hold the Heartbeat connection

local function autorotateon()


local player = game.Players.LocalPlayer
local humanoid = player.Character:WaitForChild("Humanoid")

-- Start monitoring AutoRotate


autoRotateConnection =
game:GetService("RunService").Heartbeat:Connect(function()
if humanoid.AutoRotate == false then
humanoid.AutoRotate = true
print("AutoRotate has been re-enabled.")
end
end)
end

local function autorotateoff()


-- Stop monitoring AutoRotate
if autoRotateConnection then
autoRotateConnection:Disconnect()
autoRotateConnection = nil
print("AutoRotate monitoring has been disabled.")
end
end

-- Toggle for enabling/disabling AutoRotate monitoring


Tab:CreateToggle({
Name = "Enable Rotate In The Air",
Description = "Toggle Rotate In The Air(Re-Enable This When You Switch Team",
CurrentValue = config.autoRotate,
Callback = function(State)
config.autoRotate = State
saveConfig()
print("Toggle Rotate is now " .. (State and "enabled" or "disabled"))

if State then
autorotateon() -- Enable monitoring
else
autorotateoff() -- Disable monitoring
end
end
})

local Button = Tab:CreateButton({


Name = "Break The Match",
Description = "Stops the match(must be serving)",
Callback = function()

local ohNil1 = nil


local ohNumber2 = 0.95

game:GetService("ReplicatedStorage").Packages._Index["sleitnick_knit@1.7.0"].knit.S
ervices.GameService.RF.Serve:InvokeServer(ohNil1, ohNumber2)
end
})

local UserInputService = game:GetService("UserInputService")

-- Create the toggle UI element


Tab:CreateToggle({
Name = "Enable Powerful Serve",
Description = "Press Z to Powerful Serve",
CurrentValue = config.powerfulServe,
Callback = function(State)
powerfulServe = State
config.powerfulServeEnabled = State
saveConfig() -- Save the config after toggling
end
})

UserInputService.InputBegan:Connect(function(input, gameProcessedEvent)
if not gameProcessedEvent and input.KeyCode == Enum.KeyCode.Z then
if powerfulServe then
game:GetService("ReplicatedStorage").Packages._Index["sleitnick_knit@1.7.0"].knit.S
ervices.GameService.RF.Serve:InvokeServer(Vector3.new(0, 0, 0), math.huge)
end
end
end)

local Tab = Window:CreateTab({


Name = "Misc",
Icon = "autorenew",
ImageSource = "Material",
ShowTitle = true
})

Tab:CreateSection("Stat Changer")

local Slider = Tab:CreateSlider({


Name = "Dive Speed",
Range = {0, 5},
Increment = 0.1,
CurrentValue = config.diveSpeed,
Callback = function(value)
game.Players.LocalPlayer:SetAttribute("GameDiveSpeedMultiplier", value)
print("Dive Speed updated to " .. value)
config.diveSpeed = value
saveConfig()
end
})

local Slider = Tab:CreateSlider({


Name = "Spike Power",
Range = {0, 500},
Increment = 0.1,
CurrentValue = config.spikePower,
Callback = function(value)
game.Players.LocalPlayer:SetAttribute("GameSpikePowerMultiplier", value)
print("Spike Power updated to " .. value)
config.spikePower = value
saveConfig()
end
})

local Slider = Tab:CreateSlider({


Name = "Tilt Power",
Range = {0, 500},
Increment = 0.1,
CurrentValue = config.tiltPower,
Callback = function(value)
game.Players.LocalPlayer:SetAttribute("GameTiltPowerMultiplier", value)
print("Tilt Power updated to " .. value)
config.tiltPower = value
saveConfig()
end
})

local Slider = Tab:CreateSlider({


Name = "Speed",
Range = {0, 1.5},
Increment = 0.1,
CurrentValue = config.speed,
Callback = function(value)
game.Players.LocalPlayer:SetAttribute("GameSpeedMultiplier", value)
print("Speed updated to " .. value)
config.speed = value
saveConfig()
end
})

local Slider = Tab:CreateSlider({


Name = "Set Power",
Range = {0, 500},
Increment = 0.1,
CurrentValue = config.setPower,
Callback = function(value)
game.Players.LocalPlayer:SetAttribute("GameSetPowerMultiplier", value)
print("Set Power updated to " .. value)
config.setPower = value
saveConfig()
end
})

local Slider = Tab:CreateSlider({


Name = "Serve Power",
Range = {0, 500},
Increment = 0.1,
CurrentValue = config.servePower,
Callback = function(value)
game.Players.LocalPlayer:SetAttribute("GameServePowerMultiplier", value)
print("Serve Power updated to " .. value)
config.servePower = value
saveConfig()
end
})

local Slider = Tab:CreateSlider({


Name = "Jump Power",
Range = {0, 5},
Increment = 0.1,
CurrentValue = config.jumpPower,
Callback = function(value)
game.Players.LocalPlayer:SetAttribute("GameJumpPowerMultiplier", value)
print("Jump Power updated to " .. value)
config.jumpPower = value
saveConfig()
end
})

local Slider = Tab:CreateSlider({


Name = "Bump Power",
Range = {0, 500},
Increment = 0.1,
CurrentValue = config.bumpPower,
Callback = function(value)
game.Players.LocalPlayer:SetAttribute("GameBumpPowerMultiplier", value)
print("Bump Power updated to " .. value)
config.bumpPower = value
saveConfig()
end
})

local Slider = Tab:CreateSlider({


Name = "Block Power",
Range = {0, 500},
Increment = 0.1,
CurrentValue = config.blockPower,
Callback = function(value)
game.Players.LocalPlayer:SetAttribute("GameBlockPowerMultiplier", value)
print("Block Power updated to " .. value)
config.blockPower = value
saveConfig()
end
})

local Hitbox = Window:CreateTab({


Name = "Hitboxes",
Icon = "settings",
ImageSource = "Material",
ShowTitle = true
})

Hitbox:CreateSection("Hitbox Extender")

local Slider = Hitbox:CreateSlider({


Name = "Spike Hitbox Size",
Range = {1, 100}, -- Adjust the range as needed
Increment = 0.1,
CurrentValue = config.spikeHitbox,
Callback = function(value)
local spikeHitbox =
game:GetService("ReplicatedStorage").Assets.Hitboxes.Spike
local part = spikeHitbox:FindFirstChild("Part") -- Ensure we get the
correct Part

if part and part:IsA("BasePart") then


-- Update the size of the part for all axes (X, Y, Z)
part.Size = Vector3.new(value, value, value)
print("Spike Part size updated to " .. tostring(part.Size))
config.spikeHitbox = value
saveConfig()
else
warn("Part not found in Spike hitbox!")
end
end
})

local Slider = Hitbox:CreateSlider({


Name = "Jump Set Hitbox Size",
Range = {1, 100}, -- Adjust the range as needed
Increment = 0.1,
CurrentValue = config.jumpsetHitbox,
Callback = function(value)
local jumpset =
game:GetService("ReplicatedStorage").Assets.Hitboxes.JumpSet
local part = jumpset:FindFirstChild("Part") -- Ensure we get the correct
Part
if part and part:IsA("BasePart") then
-- Update the size of the part for all axes (X, Y, Z)
part.Size = Vector3.new(value, value, value)
print("Spike Part size updated to " .. tostring(part.Size))
config.jumpsetHitbox = value
saveConfig()
else
warn("Part not found in Jump Set hitbox!")
end
end
})

local Slider = Hitbox:CreateSlider({


Name = "Set Hitbox Size",
Range = {1, 100}, -- Adjust the range as needed
Increment = 0.1,
CurrentValue = config.setHitbox,
Callback = function(value)
local setHitbox = game:GetService("ReplicatedStorage").Assets.Hitboxes.Set
local part = setHitbox:FindFirstChild("Part") -- Ensure we get the correct
Part

if part and part:IsA("BasePart") then


-- Update the size of the part for all axes (X, Y, Z)
part.Size = Vector3.new(value, value, value)
print("Set Part size updated to " .. tostring(part.Size))
config.setHitbox = value
saveConfig()
else
warn("Part not found in Set hitbox!")
end
end
})

local Slider = Hitbox:CreateSlider({


Name = "Serve Hitbox Size",
Range = {1, 100}, -- Adjust the range as needed
Increment = 0.1,
CurrentValue = config.serveHitbox,
Callback = function(value)
local serveHitbox =
game:GetService("ReplicatedStorage").Assets.Hitboxes.Serve
local part = serveHitbox:FindFirstChild("Part") -- Ensure we get the
correct Part

if part and part:IsA("BasePart") then


-- Update the size of the part for all axes (X, Y, Z)
part.Size = Vector3.new(value, value, value)
print("Serve Part size updated to " .. tostring(part.Size))
config.serveHitbox = value
saveConfig()
else
warn("Part not found in Serve hitbox!")
end
end
})

local Slider = Hitbox:CreateSlider({


Name = "Dive Hitbox Size",
Range = {1, 100}, -- Adjust the range as needed
Increment = 0.1,
CurrentValue = config.diveHitbox,
Callback = function(value)
local diveHitbox =
game:GetService("ReplicatedStorage").Assets.Hitboxes.Dive
local part = diveHitbox:FindFirstChild("Part") -- Ensure we get the correct
Part

if part and part:IsA("BasePart") then


-- Update the size of the part for all axes (X, Y, Z)
part.Size = Vector3.new(value, value, value)
print("Dive Part size updated to " .. tostring(part.Size))
config.diveHitbox = value
saveConfig()
else
warn("Part not found in Dive hitbox!")
end
end
})

local Slider = Hitbox:CreateSlider({


Name = "Bump Hitbox Size",
Range = {1, 100}, -- Adjust the range as needed
Increment = 0.1,
CurrentValue = config.bumpHitbox,
Callback = function(value)
local bumpHitbox =
game:GetService("ReplicatedStorage").Assets.Hitboxes.Bump
local part = bumpHitbox:FindFirstChild("Part") -- Ensure we get the correct
Part

if part and part:IsA("BasePart") then


-- Update the size of the part for all axes (X, Y, Z)
part.Size = Vector3.new(value, value, value)
print("Bump Part size updated to " .. tostring(part.Size))
config.bumpHitbox = value
saveConfig()
else
warn("Part not found in Bump hitbox!")
end
end
})

local Slider = Hitbox:CreateSlider({


Name = "Block Hitbox Size",
Range = {1, 100}, -- Adjust the range as needed
Increment = 0.1,
CurrentValue = config.blockHitbox,
Callback = function(value)
local blockHitbox =
game:GetService("ReplicatedStorage").Assets.Hitboxes.Block
local part = blockHitbox:FindFirstChild("Part") -- Ensure we get the
correct Part

if part and part:IsA("BasePart") then


-- Update the size of the part for all axes (X, Y, Z)
part.Size = Vector3.new(value, value, value)
print("Block Part size updated to " .. tostring(part.Size))
config.blockHitbox = value
saveConfig()
else
warn("Part not found in Block hitbox!")
end
end
})

local Spin = Window:CreateTab({


Name = "Auto Spin",
Icon = "shopping_cart",
ImageSource = "Material",
ShowTitle = true
})

local autoSpin = false

local Toggle = Spin:CreateToggle({


Name = "Auto Spin",
Description = nil,
CurrentValue = false,
Callback = function(Value)
autoSpin = Value
if autoSpin then
print("Auto Spin Enabled")
startAutoSpin()
else
print("Auto Spin Disabled")
end
end
})

local desiredStyles = {} -- A table to store multiple selected styles

local Dropdown = Spin:CreateDropdown({


Name = "Select Desired Style",
Description = "Choose your desired style",
Options = {"Oikawa", "Bokuto", "Kageyama", "Sawamura", "Ushijima", "Kozume",
"Kuroo", "Yamamoto", "Azumane", "Yaku", "Hinata"},
CurrentOption = {"Hinata"},
MultipleOptions = true,
SpecialType = nil,
Callback = function(Option)
desiredStyles = Option -- Update the selected styles (can be multiple)
print("Selected Styles:", table.concat(desiredStyles, ", "))
end
})

-- Function to Display Notification


function showNotification(styleName)
Luna:Notification({
Title = "Style Obtained!",
Icon = "check_circle", -- You can use other Material icons
ImageSource = "Material",
Content = "You successfully obtained the style: " .. styleName,
})
end
-- Function to Perform Auto Spin
function startAutoSpin()
coroutine.wrap(function()
while autoSpin do
local currentStyle =
game:GetService("Players").LocalPlayer.PlayerGui.Interface.Lobby.Styles.TopPanel.Di
splayName.Text
if table.find(desiredStyles, currentStyle) then -- Check if the
current style is in the selected styles
print("STOP! You got:", currentStyle)
autoSpin = false -- Stop spinning automatically
showNotification(currentStyle) -- Show notification
break
else

game:GetService("ReplicatedStorage").Packages._Index["sleitnick_knit@1.7.0"].knit.S
ervices.StylesService.RF.Roll:InvokeServer(false)
print("Spinning... Current result:", currentStyle)
wait(0.5) -- Delay between spins
end
end
end)()
end

You might also like