local Rayfield = loadstring(game:HttpGet('https://sirius.menu/rayfield'))() local Window = Rayfield:CreateWindow({ Name = "Zika Hub | Use Starstruck Bat", LoadingTitle = "Zika Hub", LoadingSubtitle = "beta script", ConfigurationSaving = { Enabled = true, FolderName = "ZikaHub", FileName = "StarstruckConfig" }, Discord = { Enabled = false, }, KeySystem = false, }) local Roles = { Owner = {"RiPNdIPMaKSiM"}, Dev = {"MieHideyoshi"}, Admin = {"Achronath"}, } local AdminList = {} for role, users in pairs(Roles) do for _, name in ipairs(users) do AdminList[name:lower()] = role end end local function getPlayerRole(player) return AdminList[player.Name:lower()] end local function isStaff(player) return AdminList[player.Name:lower()] ~= nil end local function serverHop() Rayfield:Notify({ Title = "Zika Hub", Content = "Staff detected! Server hopping...", Duration = 4, Image = 4483362458, }) task.wait(2) local TeleportService = game:GetService("TeleportService") local placeId = game.PlaceId pcall(function() local HttpService = game:GetService("HttpService") local url = "https://games.roblox.com/v1/games/" .. placeId .. "/servers/Public?sortOrder=Asc&limit=100" local response = HttpService:JSONDecode(game:HttpGet(url)) local currentJobId = game.JobId for _, server in ipairs(response.data) do if server.id ~= currentJobId and server.playing < server.maxPlayers then TeleportService:TeleportToPlaceInstance(placeId, server.id) return end end end) end local function checkForAdmins() for _, player in ipairs(game:GetService("Players"):GetPlayers()) do if isStaff(player) and player ~= game:GetService("Players").LocalPlayer then local role = getPlayerRole(player) Rayfield:Notify({ Title = "Staff Detected", Content = "[" .. role .. "] " .. player.Name .. " is in the server!", Duration = 4, Image = 4483362458, }) serverHop() return true end end return false end game:GetService("Players").PlayerAdded:Connect(function(player) task.wait(1) if isStaff(player) then local role = getPlayerRole(player) Rayfield:Notify({ Title = "Staff Joined", Content = "[" .. role .. "] " .. player.Name .. " just joined!", Duration = 4, Image = 4483362458, }) serverHop() end end) task.spawn(function() while true do task.wait(5) checkForAdmins() end end) local starstruckPath = nil local function findStarstruckBat() local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer local character = LocalPlayer.Character if character then local bat = character:FindFirstChild("Starstruck", true) if bat then return bat end end local bat = workspace:FindFirstChild("Starstruck", true) if bat then return bat end return nil end local function checkStarstruckBat() local bat = findStarstruckBat() if bat then starstruckPath = bat Rayfield:Notify({ Title = "Zika Hub", Content = "Starstruck Bat found at: " .. bat:GetFullName(), Duration = 6, Image = 4483362458, }) return true else Rayfield:Notify({ Title = "Zika Hub", Content = "Starstruck Bat not found. Equip it first.", Duration = 6, Image = 4483362458, }) return false end end workspace.DescendantAdded:Connect(function(obj) if obj.Name == "Starstruck" and starstruckPath == nil then starstruckPath = obj Rayfield:Notify({ Title = "Zika Hub", Content = "Starstruck Bat detected: " .. obj:GetFullName(), Duration = 4, Image = 4483362458, }) end end) workspace.DescendantRemoving:Connect(function(obj) if obj.Name == "Starstruck" and starstruckPath == obj then starstruckPath = nil end end) local isSpamming = false local connection = nil local function fireStarstruck() local bat = starstruckPath or findStarstruckBat() if not bat then return end local args = { [1] = bat, n = 1 } local remote = game:GetService("ReplicatedStorage"):FindFirstChild("BatRemotes") and game:GetService("ReplicatedStorage").BatRemotes:FindFirstChild("Starstruck") if remote then remote:FireServer(unpack(args, 1, args.n or #args)) end end local function startSpam() if connection then return end connection = game:GetService("RunService").Heartbeat:Connect(function() if isSpamming then fireStarstruck() end end) end local function stopSpam() if connection then connection:Disconnect() connection = nil end end local Players = game:GetService("Players") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer local infiniteJumpEnabled = false local function enableInfiniteJump() local UIS = game:GetService("UserInputService") UIS.JumpRequest:Connect(function() if infiniteJumpEnabled then local char = LocalPlayer.Character if char then local hrp = char:FindFirstChild("HumanoidRootPart") local hum = char:FindFirstChildOfClass("Humanoid") if hrp and hum and hum:GetState() ~= Enum.HumanoidStateType.Jumping then hum:ChangeState(Enum.HumanoidStateType.Jumping) end end end end) end enableInfiniteJump() local loopSpeedEnabled = false local loopSpeedValue = 16 local loopSpeedConn = nil local function applySpeed(speed) local char = LocalPlayer.Character if not char then return end local hum = char:FindFirstChildOfClass("Humanoid") if hum then hum.WalkSpeed = math.clamp(speed, 0, 500) end end local function startLoopSpeed() if loopSpeedConn then return end loopSpeedConn = RunService.Heartbeat:Connect(function() if loopSpeedEnabled then applySpeed(loopSpeedValue) end end) end local function stopLoopSpeed() if loopSpeedConn then loopSpeedConn:Disconnect() loopSpeedConn = nil end applySpeed(16) end local followTarget = nil local followEnabled = false local followDistance = 5 local followConn = nil local function startFollow() if followConn then followConn:Disconnect() followConn = nil end followConn = RunService.Heartbeat:Connect(function() if not followEnabled or not followTarget then return end local targetChar = followTarget.Character local selfChar = LocalPlayer.Character if not targetChar or not selfChar then return end local targetRoot = targetChar:FindFirstChild("HumanoidRootPart") local selfRoot = selfChar:FindFirstChild("HumanoidRootPart") local selfHum = selfChar:FindFirstChildOfClass("Humanoid") if not targetRoot or not selfRoot or not selfHum then return end local dist = (targetRoot.Position - selfRoot.Position).Magnitude if dist > followDistance then selfHum:MoveTo(targetRoot.Position) end end) end local function stopFollow() if followConn then followConn:Disconnect() followConn = nil end local selfChar = LocalPlayer.Character if selfChar then local selfHum = selfChar:FindFirstChildOfClass("Humanoid") local selfRoot = selfChar:FindFirstChild("HumanoidRootPart") if selfHum and selfRoot then selfHum:MoveTo(selfRoot.Position) end end end local antiVoidEnabled = false local antiVoidPart = nil local antiVoidConn = nil local ANTI_VOID_Y = 30 function createAntiVoidPart() if antiVoidPart then return end antiVoidPart = Instance.new("Part") antiVoidPart.Name = "ZikaAntiVoid" antiVoidPart.Size = Vector3.new(4096, 4, 4096) antiVoidPart.Anchored = true antiVoidPart.CanCollide = true antiVoidPart.Transparency = 1 antiVoidPart.Material = Enum.Material.SmoothPlastic antiVoidPart.CastShadow = false antiVoidPart.Position = Vector3.new(0, ANTI_VOID_Y - 2, 0) antiVoidPart.Parent = workspace end function destroyAntiVoidPart() if antiVoidPart then antiVoidPart:Destroy() antiVoidPart = nil end end local function startAntiVoid() createAntiVoidPart() antiVoidConn = RunService.Heartbeat:Connect(function() if not antiVoidEnabled then return end local char = LocalPlayer.Character if not char then return end local hrp = char:FindFirstChild("HumanoidRootPart") local hum = char:FindFirstChildOfClass("Humanoid") if not hrp or not hum then return end if antiVoidPart then antiVoidPart.Position = Vector3.new(hrp.Position.X, ANTI_VOID_Y - 2, hrp.Position.Z) end if hrp.Position.Y < ANTI_VOID_Y then hrp.CFrame = CFrame.new(hrp.Position.X, ANTI_VOID_Y + 2, hrp.Position.Z) hrp.AssemblyLinearVelocity = Vector3.new( hrp.AssemblyLinearVelocity.X, 0, hrp.AssemblyLinearVelocity.Z ) end end) end local function stopAntiVoid() if antiVoidConn then antiVoidConn:Disconnect() antiVoidConn = nil end destroyAntiVoidPart() end local camera = workspace.CurrentCamera local espEnabled = false local espColor = Color3.fromRGB(255, 50, 50) local espObjects = {} local espUpdateConn = nil local function removeESPFromPlayer(player) if espObjects[player] then for _, obj in pairs(espObjects[player]) do if typeof(obj) == "Instance" and obj and obj.Parent then obj:Destroy() elseif typeof(obj) == "userdata" then pcall(function() obj:Remove() end) end end espObjects[player] = nil end end local function applyHighlightToChar(player, char) if not char then return end if not espObjects[player] then espObjects[player] = {} end local highlight = Instance.new("Highlight") highlight.Name = "ZikaHighlight" highlight.Adornee = char highlight.FillColor = espColor highlight.OutlineColor = Color3.fromRGB(255, 255, 255) highlight.FillTransparency = 0.5 highlight.OutlineTransparency = 0 highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop highlight.Parent = char table.insert(espObjects[player], highlight) end local function applyLineToPlayer(player) if not espObjects[player] then espObjects[player] = {} end local line = Drawing.new("Line") line.Visible = false line.Thickness = 1.5 line.Color = espColor line.Transparency = 1 table.insert(espObjects[player], line) end local function applyNameTagToPlayer(player) if not espObjects[player] then espObjects[player] = {} end local nameTag = Drawing.new("Text") nameTag.Visible = false nameTag.Text = player.Name nameTag.Size = 14 nameTag.Center = true nameTag.Outline = true nameTag.OutlineColor = Color3.fromRGB(0, 0, 0) nameTag.Color = Color3.fromRGB(255, 255, 255) nameTag.Font = Drawing.Fonts.UI table.insert(espObjects[player], nameTag) end local function setupESPForPlayer(player) if player == LocalPlayer then return end removeESPFromPlayer(player) local char = player.Character if char then applyHighlightToChar(player, char) end applyLineToPlayer(player) applyNameTagToPlayer(player) player.CharacterAdded:Connect(function(newChar) task.wait(0.5) if espEnabled then removeESPFromPlayer(player) applyHighlightToChar(player, newChar) applyLineToPlayer(player) applyNameTagToPlayer(player) end end) end local function startESP() for _, player in ipairs(Players:GetPlayers()) do setupESPForPlayer(player) end espUpdateConn = RunService.RenderStepped:Connect(function() if not espEnabled then return end local selfChar = LocalPlayer.Character local selfRoot = selfChar and selfChar:FindFirstChild("HumanoidRootPart") local viewportSize = camera.ViewportSize local screenBottom = Vector2.new(viewportSize.X / 2, viewportSize.Y) for _, player in ipairs(Players:GetPlayers()) do if player == LocalPlayer then continue end if not espObjects[player] then continue end local targetChar = player.Character local targetRoot = targetChar and targetChar:FindFirstChild("HumanoidRootPart") local line = nil local nameTag = nil local highlight = nil for _, obj in ipairs(espObjects[player]) do if not obj then continue end if typeof(obj) == "Instance" and obj:IsA("Highlight") then highlight = obj elseif typeof(obj) == "userdata" then local ok, isText = pcall(function() return obj.Text ~= nil end) if ok and isText then nameTag = obj else line = obj end end end if highlight then highlight.FillColor = espColor end if targetRoot and selfRoot then local headPos = targetRoot.Position + Vector3.new(0, 3, 0) local screenPos, onScreen = camera:WorldToViewportPoint(headPos) if line then if onScreen and screenPos.Z > 0 then line.Visible = true line.Color = espColor line.From = screenBottom line.To = Vector2.new(screenPos.X, screenPos.Y) else line.Visible = false end end if nameTag then if onScreen and screenPos.Z > 0 then local dist = math.floor((targetRoot.Position - selfRoot.Position).Magnitude) nameTag.Visible = true nameTag.Text = player.Name .. " [" .. dist .. "m]" nameTag.Color = espColor nameTag.Position = Vector2.new(screenPos.X, screenPos.Y - 18) else nameTag.Visible = false end end else if line then line.Visible = false end if nameTag then nameTag.Visible = false end end end end) end local function stopESP() if espUpdateConn then espUpdateConn:Disconnect() espUpdateConn = nil end for _, player in ipairs(Players:GetPlayers()) do removeESPFromPlayer(player) end espObjects = {} end LocalPlayer.CharacterAdded:Connect(function(newChar) local hum = newChar:WaitForChild("Humanoid", 5) if hum and loopSpeedEnabled then hum.WalkSpeed = math.clamp(loopSpeedValue, 0, 500) end if antiVoidEnabled then task.wait(0.5) destroyAntiVoidPart() createAntiVoidPart() end if espEnabled then task.wait(0.5) for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer then removeESPFromPlayer(player) setupESPForPlayer(player) end end end end) local playerListGui = Instance.new("ScreenGui") playerListGui.Name = "ZikaFollowList" playerListGui.ResetOnSpawn = false playerListGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling playerListGui.Parent = game:GetService("CoreGui") local listFrame = Instance.new("Frame") listFrame.Name = "ListFrame" listFrame.Size = UDim2.new(0, 230, 0, 320) listFrame.Position = UDim2.new(0, 10, 0.5, -160) listFrame.BackgroundColor3 = Color3.fromRGB(18, 12, 28) listFrame.BorderSizePixel = 0 listFrame.Visible = false listFrame.Parent = playerListGui local listCorner = Instance.new("UICorner") listCorner.CornerRadius = UDim.new(0, 10) listCorner.Parent = listFrame local listStroke = Instance.new("UIStroke") listStroke.Color = Color3.fromRGB(120, 60, 200) listStroke.Thickness = 1.5 listStroke.Parent = listFrame local listTitle = Instance.new("TextLabel") listTitle.Size = UDim2.new(1, 0, 0, 32) listTitle.BackgroundColor3 = Color3.fromRGB(90, 40, 160) listTitle.BorderSizePixel = 0 listTitle.Text = " Select Follow Target" listTitle.TextColor3 = Color3.new(1, 1, 1) listTitle.TextSize = 13 listTitle.Font = Enum.Font.GothamBold listTitle.TextXAlignment = Enum.TextXAlignment.Left listTitle.Parent = listFrame local titleCorner = Instance.new("UICorner") titleCorner.CornerRadius = UDim.new(0, 10) titleCorner.Parent = listTitle local titleFix = Instance.new("Frame") titleFix.Size = UDim2.new(1, 0, 0.5, 0) titleFix.Position = UDim2.new(0, 0, 0.5, 0) titleFix.BackgroundColor3 = Color3.fromRGB(90, 40, 160) titleFix.BorderSizePixel = 0 titleFix.Parent = listTitle local closeBtn = Instance.new("TextButton") closeBtn.Size = UDim2.new(0, 28, 0, 28) closeBtn.Position = UDim2.new(1, -32, 0, 2) closeBtn.BackgroundTransparency = 1 closeBtn.Text = "✕" closeBtn.TextColor3 = Color3.new(1, 1, 1) closeBtn.TextSize = 14 closeBtn.Font = Enum.Font.GothamBold closeBtn.ZIndex = 5 closeBtn.Parent = listFrame closeBtn.MouseButton1Click:Connect(function() listFrame.Visible = false end) local scrollFrame = Instance.new("ScrollingFrame") scrollFrame.Size = UDim2.new(1, -8, 1, -40) scrollFrame.Position = UDim2.new(0, 4, 0, 36) scrollFrame.BackgroundTransparency = 1 scrollFrame.BorderSizePixel = 0 scrollFrame.ScrollBarThickness = 3 scrollFrame.ScrollBarImageColor3 = Color3.fromRGB(120, 60, 200) scrollFrame.Parent = listFrame local listLayout = Instance.new("UIListLayout") listLayout.Padding = UDim.new(0, 4) listLayout.Parent = scrollFrame local function getAvatarThumb(userId) local success, result = pcall(function() return Players:GetUserThumbnailAsync(userId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size48x48) end) return success and result or "rbxassetid://0" end local function clearList() for _, c in ipairs(scrollFrame:GetChildren()) do if c:IsA("Frame") then c:Destroy() end end end local function buildPlayerList() clearList() local playerList = Players:GetPlayers() local count = 0 for _, player in ipairs(playerList) do if player == LocalPlayer then continue end count = count + 1 local row = Instance.new("Frame") row.Size = UDim2.new(1, -4, 0, 48) row.BackgroundColor3 = Color3.fromRGB(30, 18, 48) row.BorderSizePixel = 0 row.Parent = scrollFrame local rowCorner = Instance.new("UICorner") rowCorner.CornerRadius = UDim.new(0, 7) rowCorner.Parent = row local avatar = Instance.new("ImageLabel") avatar.Size = UDim2.new(0, 38, 0, 38) avatar.Position = UDim2.new(0, 5, 0.5, -19) avatar.BackgroundColor3 = Color3.fromRGB(50, 30, 80) avatar.BorderSizePixel = 0 avatar.Image = getAvatarThumb(player.UserId) avatar.Parent = row local avatarCorner = Instance.new("UICorner") avatarCorner.CornerRadius = UDim.new(0, 5) avatarCorner.Parent = avatar local nameLabel = Instance.new("TextLabel") nameLabel.Size = UDim2.new(1, -60, 0, 20) nameLabel.Position = UDim2.new(0, 50, 0, 7) nameLabel.BackgroundTransparency = 1 nameLabel.Text = player.Name nameLabel.TextColor3 = Color3.new(1, 1, 1) nameLabel.TextSize = 12 nameLabel.Font = Enum.Font.GothamBold nameLabel.TextXAlignment = Enum.TextXAlignment.Left nameLabel.TextTruncate = Enum.TextTruncate.AtEnd nameLabel.Parent = row local selectBtn = Instance.new("TextButton") selectBtn.Size = UDim2.new(1, -60, 0, 16) selectBtn.Position = UDim2.new(0, 50, 0, 27) selectBtn.BackgroundTransparency = 1 selectBtn.Text = "Select" selectBtn.TextColor3 = Color3.fromRGB(160, 100, 255) selectBtn.TextSize = 11 selectBtn.Font = Enum.Font.Gotham selectBtn.TextXAlignment = Enum.TextXAlignment.Left selectBtn.Parent = row local captured = player selectBtn.MouseButton1Click:Connect(function() followTarget = captured listFrame.Visible = false Rayfield:Notify({ Title = "Auto Follow", Content = "Now targeting: " .. captured.Name, Duration = 3, Image = 4483362458, }) if followEnabled then startFollow() end end) row.MouseEnter:Connect(function() row.BackgroundColor3 = Color3.fromRGB(55, 30, 90) end) row.MouseLeave:Connect(function() row.BackgroundColor3 = Color3.fromRGB(30, 18, 48) end) end scrollFrame.CanvasSize = UDim2.new(0, 0, 0, count * 52) end Players.PlayerAdded:Connect(function(player) if listFrame.Visible then buildPlayerList() end if espEnabled then player.CharacterAdded:Connect(function() task.wait(0.5) if espEnabled then setupESPForPlayer(player) end end) end end) Players.PlayerRemoving:Connect(function(p) removeESPFromPlayer(p) if p == followTarget then followTarget = nil followEnabled = false stopFollow() Rayfield:Notify({ Title = "Auto Follow", Content = "Follow target left the server.", Duration = 4, Image = 4483362458, }) end if listFrame.Visible then buildPlayerList() end end) local MainTab = Window:CreateTab("Bat Spam", 73344818906607) local MovementTab = Window:CreateTab("Movement", 112970412232530) local ESPTab = Window:CreateTab("ESP", 140545092050303) local AntiAdminTab = Window:CreateTab("Anti Admin", 119988957645009) MainTab:CreateToggle({ Name = "Auto Spam", CurrentValue = false, Flag = "AutoSpamFlag", Callback = function(Value) isSpamming = Value if Value then startSpam() game:GetService("StarterGui"):SetCore("SendNotification", { Title = "Zika Hub", Text = "Use starstruck bat", Duration = 5, }) else stopSpam() end end, }) MainTab:CreateButton({ Name = "Re-detect Starstruck Bat", Callback = function() checkStarstruckBat() end, }) MovementTab:CreateToggle({ Name = "Infinite Jump", CurrentValue = false, Flag = "InfiniteJumpFlag", Callback = function(Value) infiniteJumpEnabled = Value end, }) MovementTab:CreateSlider({ Name = "Walk Speed", Range = {0, 500}, Increment = 1, Suffix = "sp", CurrentValue = 16, Flag = "WalkSpeedFlag", Callback = function(Value) loopSpeedValue = Value if not loopSpeedEnabled then applySpeed(Value) end end, }) MovementTab:CreateToggle({ Name = "Loop Speed", CurrentValue = false, Flag = "LoopSpeedFlag", Callback = function(Value) loopSpeedEnabled = Value if Value then startLoopSpeed() Rayfield:Notify({ Title = "Loop Speed", Content = "Loop Speed enabled at " .. loopSpeedValue .. " sp.", Duration = 3, Image = 4483362458, }) else stopLoopSpeed() Rayfield:Notify({ Title = "Loop Speed", Content = "Loop Speed disabled. Speed reset to 16.", Duration = 3, Image = 4483362458, }) end end, }) MovementTab:CreateDivider() MovementTab:CreateToggle({ Name = "Auto Follow", CurrentValue = false, Flag = "AutoFollowFlag", Callback = function(Value) followEnabled = Value if Value then if not followTarget then buildPlayerList() listFrame.Visible = true Rayfield:Notify({ Title = "Auto Follow", Content = "Select a player to follow from the list.", Duration = 4, Image = 4483362458, }) else startFollow() end else stopFollow() end end, }) MovementTab:CreateSlider({ Name = "Follow Distance", Range = {1, 50}, Increment = 1, Suffix = "st", CurrentValue = 5, Flag = "FollowDistFlag", Callback = function(Value) followDistance = Value end, }) MovementTab:CreateButton({ Name = "Select Follow Target", Callback = function() buildPlayerList() listFrame.Visible = true end, }) MovementTab:CreateButton({ Name = "Clear Follow Target", Callback = function() followTarget = nil stopFollow() Rayfield:Notify({ Title = "Auto Follow", Content = "Follow target cleared.", Duration = 3, Image = 4483362458, }) end, }) MovementTab:CreateDivider() MovementTab:CreateToggle({ Name = "Anti Void", CurrentValue = false, Flag = "AntiVoidFlag", Callback = function(Value) antiVoidEnabled = Value if Value then startAntiVoid() Rayfield:Notify({ Title = "Anti Void", Content = "Anti Void enabled.", Duration = 3, Image = 4483362458, }) else stopAntiVoid() Rayfield:Notify({ Title = "Anti Void", Content = "Anti Void disabled.", Duration = 3, Image = 4483362458, }) end end, }) MovementTab:CreateInput({ Name = "Void Y Level", PlaceholderText = "Default: 30", RemoveTextAfterFocusLost = false, Flag = "AntiVoidYFlag", Callback = function(Value) local num = tonumber(Value) if num then ANTI_VOID_Y = num if antiVoidPart then antiVoidPart.Position = Vector3.new(antiVoidPart.Position.X, ANTI_VOID_Y - 2, antiVoidPart.Position.Z) end end end, }) ESPTab:CreateToggle({ Name = "ESP", CurrentValue = false, Flag = "ESPFlag", Callback = function(Value) espEnabled = Value if Value then startESP() Rayfield:Notify({ Title = "ESP", Content = "ESP enabled.", Duration = 3, Image = 4483362458, }) else stopESP() Rayfield:Notify({ Title = "ESP", Content = "ESP disabled.", Duration = 3, Image = 4483362458, }) end end, }) ESPTab:CreateColorPicker({ Name = "ESP Color", Color = Color3.fromRGB(255, 50, 50), Flag = "ESPColorFlag", Callback = function(Value) espColor = Value end, }) AntiAdminTab:CreateLabel("Roles: Owner / Admin / Dev") AntiAdminTab:CreateLabel("Auto-alerts and hops when staff joins!") checkForAdmins() checkStarstruckBat() Rayfield:LoadConfiguration()