-- Volleyball Legends — Studio-safe refactor with Hitbox Visualizer
-- WARNING: SAFE FOR DEVELOPMENT / STUDIO USE ONLY. NO bypass/loadstring, NO firetouchinterest.
-- Place in StarterPlayer > StarterPlayerScripts
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local UIS = game:GetService("UserInputService")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local rootPart = character:WaitForChild("HumanoidRootPart")
-- Venyx UI (local copy). Replace this load if you prefer a different UI.
local library = loadstring(game:HttpGet("https://raw.githubusercontent.com/zxciaz/VenyxUI/main/Reupload"))()
local venyx = library.new("Volleyball Legends v3.0 (Studio)", 5013109572)
local themes = {
Background = Color3.fromRGB(24,24,24),
Glow = Color3.fromRGB(0,255,255),
Accent = Color3.fromRGB(10,10,10),
LightContrast = Color3.fromRGB(20,20,20),
DarkContrast = Color3.fromRGB(14,14,14),
TextColor = Color3.fromRGB(255,255,255),
}
local page = venyx:addPage("Main", 5012544693)
local section1 = page:addSection("AutoBump Settings")
local section2 = page:addSection("Player Settings")
local sectionHitbox = page:addSection("Hitbox Visualizer")
local section3 = page:addSection("Credits")
-- Settings
local settings = {
AutoBump = false, -- KEEP OFF by default (non-exploit)
AutoPosition = false,
AntiAFK = false,
BumpRange = 15,
JumpWhileBump = true,
DebugMode = false,
-- Hitbox visualizer
HitboxEnabled = false,
HitboxRadius = 3, -- studs
HitboxShowFill = false,
HitboxColor = Color3.fromRGB(0,255,128),
HitboxAlpha = 0.45,
}
-- UI elements
section1:addToggle("AutoBump (placeholder)", settings.AutoBump, function(v) settings.AutoBump = v end)
section1:addToggle("Jump While Bump", settings.JumpWhileBump, function(v) settings.JumpWhileBump = v end)
section1:addSlider("Bump Range", settings.BumpRange, 5, 30, function(v) settings.BumpRange = v end)
section2:addToggle("Auto Position (client-only)", settings.AutoPosition, function(v) settings.AutoPosition = v end)
section2:addToggle("Anti-AFK (client-only)", settings.AntiAFK, function(v) settings.AntiAFK = v end)
section2:addToggle("Debug Mode", settings.DebugMode, function(v) settings.DebugMode = v end)
-- Hitbox UI
sectionHitbox:addToggle("Enable Hitbox Visualizer", settings.HitboxEnabled, function(v) settings.HitboxEnabled = v end)
sectionHitbox:addSlider("Hitbox Radius", settings.HitboxRadius, 0.2, 20, function(v) settings.HitboxRadius = v end)
sectionHitbox:addToggle("Show Fill", settings.HitboxShowFill, function(v) settings.HitboxShowFill = v end)
-- optional color / alpha could be added if Venyx supports color pickers
section3:addButton("Script by AdamDaOne (refactor)", function() setclipboard("AdamDaOne on GitHub") end)
section3:addKeybind("Toggle GUI", Enum.KeyCode.RightControl, function() venyx:toggle() end, function() end)
venyx:setTheme(themes)
venyx:selectPage(venyx.pages[1], true)
-- =========================
-- Ball finder utilities
-- =========================
local ballNameCandidates = {"Ball","Volleyball","ball"}
local function findBall()
for _, name in ipairs(ballNameCandidates) do
local b = Workspace:FindFirstChild(name)
if b and b:IsA("BasePart") then return b end
end
-- fallback: fuzzy search
for _, v in ipairs(Workspace:GetDescendants()) do
if v:IsA("BasePart") and (v.Name:lower():find("ball") or v.Name:lower():find("volley")) then
return v
end
end
return nil
end
-- =========================
-- Hitbox Visualizer (client-only)
-- =========================
local visual = nil
local ring = nil
local function createVisualizer()
if visual and visual.Parent then return end
visual = Instance.new("Part")
visual.Name = "HitboxVisualizer_Part"
visual.Anchored = true
visual.CanCollide = false
visual.CastShadow = false
visual.Transparency = 1
visual.Material = Enum.Material.Neon
visual.Parent = workspace
local mesh = Instance.new("SpecialMesh", visual)
mesh.MeshType = Enum.MeshType.Sphere
mesh.Name = "SphereMesh"
ring = Instance.new("Part")
ring.Name = "HitboxVisualizer_Ring"
ring.Anchored = true
ring.CanCollide = false
ring.CastShadow = false
ring.Transparency = 1
ring.Material = Enum.Material.Neon
ring.Parent = workspace
local ringMesh = Instance.new("SpecialMesh", ring)
ringMesh.MeshType = Enum.MeshType.Sphere
ringMesh.Name = "RingMesh"
visual:SetAttribute("viz", true)
ring:SetAttribute("viz", true)
end
local function destroyVisualizer()
if visual then pcall(function() visual:Destroy() end) end
if ring then pcall(function() ring:Destroy() end) end
visual = nil; ring = nil
end
local function applyVisualSize(radius)
if not visual or not ring then return end
local diameter = math.max(0.05, radius * 2)
local mesh = visual:FindFirstChild("SphereMesh")
local ringMesh = ring:FindFirstChild("RingMesh")
if mesh then mesh.Scale = Vector3.new(diameter, diameter, diameter) end
if ringMesh then ringMesh.Scale = Vector3.new(diameter * 1.01, 0.06, diameter * 1.01) end
-- color/transparency
visual.Color = settings.HitboxColor
if settings.HitboxShowFill then
visual.Transparency = math.clamp(1 - (settings.HitboxAlpha), 0, 1)
else
visual.Transparency = 1 -- invisible fill when not showing fill
end
ring.Color = settings.HitboxColor
ring.Transparency = math.clamp(1 - 0.92, 0, 1) -- thin visible ring tint
end
local function updateVisualizer(ballPart)
if not settings.HitboxEnabled then
destroyVisualizer()
return
end
if not ballPart or not ballPart:IsDescendantOf(workspace) then
destroyVisualizer()
return
end
createVisualizer()
local pos = ballPart.Position
visual.CFrame = CFrame.new(pos)
ring.CFrame = CFrame.new(pos) * CFrame.Angles(math.rad(90),0,0)
applyVisualSize(settings.HitboxRadius)
end
-- =========================
-- AutoBump (placeholder) - NO simulated touches
-- =========================
local function bumpBall()
if not settings.AutoBump then return end
local ball = findBall()
if not ball then return end
local distance = (ball.Position - rootPart.Position).Magnitude
if distance <= settings.BumpRange then
if settings.JumpWhileBump and character and character:FindFirstChild("Humanoid") then
character.Humanoid.Jump = true
end
-- SAFE: do NOT call firetouchinterest. Instead:
-- 1) print/log for testing, OR
-- 2) trigger a server RemoteEvent that YOU implement server-side (recommended secure approach).
if settings.DebugMode then
print("[AutoBump] In-range, would attempt bump. Distance:", distance)
end
-- Example: if you created a RemoteEvent named "RequestBump" under ReplicatedStorage,
-- you could call it here to request a server-authoritative bump. Not included by default.
end
end
-- =========================
-- Auto-positioning
-- =========================
local function positionPlayer()
if not settings.AutoPosition then return end
local ball = findBall()
if not ball then return end
local targetPosition = ball.Position + Vector3.new(0, 3, 0)
rootPart.CFrame = CFrame.new(targetPosition) * CFrame.new(math.random(-2,2), 0, math.random(-2,2))
end
-- =========================
-- Anti-AFK (benign emulation)
-- =========================
local lastMovement = tick()
if settings.AntiAFK then
coroutine.wrap(function()
while true do
wait(30)
if settings.AntiAFK then
-- benign short key pulse to simulate activity in Studio only
UIS:SetCore("SendNotification", {Title="AntiAFK", Text="Client-side ping", Duration=1})
lastMovement = tick()
end
wait(1)
end
end)()
end
-- =========================
-- Main loop
-- =========================
local targetBall = findBall()
Workspace.DescendantAdded:Connect(function(desc)
if not targetBall and desc:IsA("BasePart") and desc.Name:lower():find("ball") then
targetBall = desc
end
end)
RunService.Heartbeat:Connect(function(dt)
pcall(function()
if not character or not character.Parent then
character = player.Character
if character then rootPart = character:WaitForChild("HumanoidRootPart") end
return
end
positionPlayer()
bumpBall()
-- anti-afk pulse fallback
if settings.AntiAFK and (tick() - lastMovement) > 20 then
UIS:SetCore("SendNotification", {Title="AntiAFK", Text="Auto pulse", Duration=1})
lastMovement = tick()
end
-- update hitbox visualizer
if settings.HitboxEnabled and (targetBall and targetBall:IsDescendantOf(workspace)) then
updateVisualizer(targetBall)
else
destroyVisualizer()
-- try to reacquire ball
if not targetBall or not targetBall:IsDescendantOf(workspace) then
targetBall = findBall()
end
end
end)
end)
-- Notification (Studio-friendly)
if startergui and startergui.SetCore then
pcall(function()
game.StarterGui:SetCore("SendNotification", {
Title = "Volleyball Legends (Studio)",
Text = "Script loaded (studio-safe). Use GUI to enable Visualizer.",
Duration = 6
})
end)
end
print("Volleyball Legends (Studio-safe) Loaded | Hitbox Visualizer integrated")