-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] -- [VOID] Marine Academy Roleplay | Part 1 (Core, Main, Combat) local Fluent = loadstring(game:HttpGet("https://github.com/StyearX/Fluent-Modded/releases/download/Fluent/FluentPro"))() local SaveManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/StyearX/Fluent-modded/main/Addons/SaveManager.lua"))() local InterfaceManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/StyearX/Fluent-modded/main/Addons/InterfaceManager.lua"))() local CoreGui = game:GetService("CoreGui") local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local Camera = workspace.CurrentCamera local Window = Fluent:CreateWindow({ Title = "🔥 [VOID] Marine Academy Roleplay", SubTitle = "by VOID Hub", TabWidth = 160, Size = UDim2.fromOffset(580, 460), Acrylic = true, Theme = "AMOLED", MinimizeKey = Enum.KeyCode.LeftControl, Search = true, }) local Tabs = { Main = Window:AddTab({ Title = "Main Menu", Icon = "solar/home-bold" }), Combat = Window:AddTab({ Title = "Combat", Icon = "lucide/crosshair" }), Esp = Window:AddTab({ Title = "ESP", Icon = "lucide/eye" }), Settings = Window:AddTab({ Title = "Settings", Icon = "lucide/settings" }), } -- MAIN MENU Tabs.Main:AddSection("Hub Information & Profile") Tabs.Main:AddParagraph({ Title = "⚡ [VOID] Profile & Credits", Content = "1. Creator Credit: VOID Hub\n2. Profile Username: " .. LocalPlayer.Name .. " (Display: " .. LocalPlayer.DisplayName .. ")\n3. Custom Handle: poutewuoppkaka\n4. Message: Hope you like the script, kuya!" }) local StatsParagraph = Tabs.Main:AddParagraph({ Title = "📊 Live Server Stats", Content = "Calculating ping and player count..." }) task.spawn(function() while task.wait(1) do if LocalPlayer then local pingVal = LocalPlayer:GetNetworkPing() and math.floor(LocalPlayer:GetNetworkPing() * 1000) or 0 local playerCount = #Players:GetPlayers() StatsParagraph:SetDesc("🌐 Ping: " .. pingVal .. "ms | 👥 Players Online: " .. playerCount) end end end) Tabs.Main:AddSection("Feedback & Rating") Tabs.Main:AddInput("FeedbackInput", { Title = "4. Feedback", Description = "Type your feedback or suggestions here...", Default = "", Placeholder = "Write feedback...", Callback = function(Value) getgenv().UserFeedback = Value end }) Tabs.Main:AddSlider("StarRatingSlider", { Title = "5. Rate Script (Stars)", Description = "Rate this hub from 5 to 0 stars", Default = 5, Min = 0, Max = 5, Rounding = 0, Callback = function(Value) Fluent:Notify({ Title = "Rating Updated", Content = "You rated this script " .. Value .. " / 5 stars! ⭐", Duration = 3 }) end }) -- COMBAT TAB (CENTER-SCREEN AIMBOT & SMOOTH) getgenv().VoidCombat = { Aimbot = false, Smooth = 200, RainbowFov = false, FovSize = 250, VisibilityCheck = false, TeamCheck = true } Tabs.Combat:AddSection("Center-Screen Aimbot") Tabs.Combat:AddToggle("AimbotToggle", { Title = "1. Center Aimbot", Default = false }):OnChanged(function(v) getgenv().VoidCombat.Aimbot = v end) Tabs.Combat:AddSlider("SmoothSlider", { Title = "2. Aimbot Smooth", Default = 200, Min = 0, Max = 200, Rounding = 1, Callback = function(v) getgenv().VoidCombat.Smooth = v end }) Tabs.Combat:AddToggle("FovRainbowToggle", { Title = "3. Circle FOV Rainbow", Default = false }):OnChanged(function(v) getgenv().VoidCombat.RainbowFov = v end) Tabs.Combat:AddSlider("FovSizeSlider", { Title = "4. Circle FOV Size", Default = 250, Min = 0, Max = 250, Rounding = 1, Callback = function(v) getgenv().VoidCombat.FovSize = v end }) Tabs.Combat:AddToggle("VisToggle", { Title = "5. Visibility Check", Default = false }):OnChanged(function(v) getgenv().VoidCombat.VisibilityCheck = v end) Tabs.Combat:AddToggle("TeamToggle", { Title = "6. Team Check (Enemy Only)", Default = true }):OnChanged(function(v) getgenv().VoidCombat.TeamCheck = v end) -- [VOID] Marine Academy Roleplay | Part 2 (ESP Tab & Render Loops) getgenv().VoidEsp = { Tracers = false, Boxes = false, Health = false, TeamCheck = true } Tabs.Esp:AddSection("Visual ESP Settings") Tabs.Esp:AddToggle("TracersRainbowToggle", { Title = "1. Tracers Rainbow", Default = false }):OnChanged(function(v) getgenv().VoidEsp.Tracers = v end) Tabs.Esp:AddToggle("BoxRainbowToggle", { Title = "2. Box Rainbow", Default = false }):OnChanged(function(v) getgenv().VoidEsp.Boxes = v end) Tabs.Esp:AddToggle("HealthNormalToggle", { Title = "3. Health Bar Normal", Default = false }):OnChanged(function(v) getgenv().VoidEsp.Health = v end) Tabs.Esp:AddToggle("EspTeamToggle", { Title = "4. Enemy Team Only Filter", Default = true }):OnChanged(function(v) getgenv().VoidEsp.TeamCheck = v end) local FOVCircle = Drawing.new("Circle") FOVCircle.Thickness = 2 FOVCircle.NumSides = 60 FOVCircle.Filled = false FOVCircle.Transparency = 0.7 local espDrawings = {} RunService.RenderStepped:Connect(function() -- Lock FOV circle strictly to the center of the screen viewport local screenCenter = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2) FOVCircle.Position = screenCenter FOVCircle.Radius = getgenv().VoidCombat.FovSize FOVCircle.Visible = getgenv().VoidCombat.RainbowFov or getgenv().VoidCombat.Aimbot if getgenv().VoidCombat.RainbowFov then FOVCircle.Color = Color3.fromHSV(tick() % 5 / 5, 1, 1) else FOVCircle.Color = Color3.fromRGB(255, 90, 185) end if getgenv().VoidCombat.Aimbot then local closestTarget = nil local shortestDistance = getgenv().VoidCombat.FovSize for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer and p.Character and p.Character:FindFirstChild("HumanoidRootPart") and p.Character:FindFirstChild("Humanoid") and p.Character.Humanoid.Health > 0 then local isValidTeam = true if getgenv().VoidCombat.TeamCheck and p.Team == LocalPlayer.Team and p.Team ~= nil then isValidTeam = false end if isValidTeam then local hrp = p.Character.HumanoidRootPart local screenPos, onScreen = Camera:WorldToViewportPoint(hrp.Position) if onScreen then -- Calculate distance strictly from the screen center, not mouse input local magnitude = (Vector2.new(screenPos.X, screenPos.Y) - screenCenter).Magnitude if magnitude < shortestDistance then if not getgenv().VoidCombat.VisibilityCheck or #Camera:GetPartsObscuringTarget({hrp.Position}, {LocalPlayer.Character, p.Character}) == 0 then shortestDistance = magnitude closestTarget = hrp end end end end end end if closestTarget then -- Smoothly rotate camera directly towards the target without depending on touch/mouse dragging local targetCFrame = CFrame.new(Camera.CFrame.Position, closestTarget.Position) local smoothness = math.max(getgenv().VoidCombat.Smooth, 1) Camera.CFrame = Camera.CFrame:Lerp(targetCFrame, 1 / smoothness) end end local rainbowColor = Color3.fromHSV(tick() % 5 / 5, 1, 1) for _, p in ipairs(Players:GetPlayers()) do if not espDrawings[p] then espDrawings[p] = { Box = Drawing.new("Square"), Tracer = Drawing.new("Line"), HealthBg = Drawing.new("Square"), HealthBar = Drawing.new("Square") } espDrawings[p].Box.Thickness = 1.5 espDrawings[p].Box.Filled = false espDrawings[p].Tracer.Thickness = 1.5 espDrawings[p].HealthBg.Thickness = 1 espDrawings[p].HealthBg.Filled = true espDrawings[p].HealthBg.Color = Color3.fromRGB(0, 0, 0) espDrawings[p].HealthBar.Thickness = 1 espDrawings[p].HealthBar.Filled = true end local drawings = espDrawings[p] local shouldRender = false if p ~= LocalPlayer and p.Character and p.Character:FindFirstChild("HumanoidRootPart") and p.Character:FindFirstChild("Humanoid") and p.Character.Humanoid.Health > 0 then local isEnemy = true if getgenv().VoidEsp.TeamCheck and p.Team == LocalPlayer.Team and p.Team ~= nil then isEnemy = false end if isEnemy then local hrp = p.Character.HumanoidRootPart local head = p.Character:FindFirstChild("Head") or hrp local vector, onScreen = Camera:WorldToViewportPoint(hrp.Position) if onScreen then shouldRender = true local rootPos = Camera:WorldToViewportPoint(hrp.Position - Vector3.new(0, 3, 0)) local headPos = Camera:WorldToViewportPoint(head.Position + Vector3.new(0, 0.8, 0)) local height = math.abs(headPos.Y - rootPos.Y) local width = height / 2 if getgenv().VoidEsp.Tracers then drawings.Tracer.Visible = true drawings.Tracer.From = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y) drawings.Tracer.To = Vector2.new(vector.X, rootPos.Y) drawings.Tracer.Color = rainbowColor else drawings.Tracer.Visible = false end if getgenv().VoidEsp.Boxes then drawings.Box.Visible = true drawings.Box.Size = Vector2.new(width, height) drawings.Box.Position = Vector2.new(vector.X - width / 2, headPos.Y) drawings.Box.Color = rainbowColor else drawings.Box.Visible = false end if getgenv().VoidEsp.Health then local humanoid = p.Character.Humanoid local healthPercent = math.clamp(humanoid.Health / humanoid.MaxHealth, 0, 1) drawings.HealthBg.Visible = true drawings.HealthBg.Size = Vector2.new(2, height) drawings.HealthBg.Position = Vector2.new(vector.X - width / 2 - 6, headPos.Y) drawings.HealthBar.Visible = true drawings.HealthBar.Size = Vector2.new(2, height * healthPercent) drawings.HealthBar.Position = Vector2.new(vector.X - width / 2 - 6, headPos.Y + (height * (1 - healthPercent))) drawings.HealthBar.Color = Color3.fromRGB(255 - (healthPercent * 255), healthPercent * 255, 0) else drawings.HealthBg.Visible = false drawings.HealthBar.Visible = false end end end end if not shouldRender then drawings.Box.Visible = false drawings.Tracer.Visible = false drawings.HealthBg.Visible = false drawings.HealthBar.Visible = false end end end) -- [VOID] Marine Academy Roleplay | Part 3 (Settings & Mobile Toggle) local TeleportService = game:GetService("TeleportService") local Lighting = game:GetService("Lighting") Tabs.Settings:AddSection("Utility & Performance") -- 1. Anti Lag Toggle Tabs.Settings:AddToggle("AntiLagToggle", { Title = "1. Anti-Lag (FPS Booster)", Description = "Disables textures, shadows, and effects to boost performance", Default = false, Callback = function(Value) if Value then for _, v in ipairs(Lighting:GetChildren()) do if v:IsA("PostEffect") or v:IsA("Sky") then v.Enabled = false end end Lighting.GlobalShadows = false for _, part in ipairs(workspace:GetDescendants()) do if part:IsA("BasePart") then part.Material = Enum.Material.SmoothPlastic part.Reflectance = 0 end end Fluent:Notify({ Title = "Anti-Lag", Content = "Performance boost enabled!", Duration = 3 }) else Lighting.GlobalShadows = true Fluent:Notify({ Title = "Anti-Lag", Content = "Performance boost disabled.", Duration = 3 }) end end }) -- 2. Anti Kick Toggle Tabs.Settings:AddToggle("AntiKickToggle", { Title = "2. Anti-Kick", Description = "Prevents unexpected server kicks and idle disconnects", Default = false, Callback = function(Value) getgenv().AntiKickEnabled = Value if Value then local mt = getrawmetatable(game) setreadonly(mt, false) local oldNamecall = mt.__namecall mt.__namecall = newcclosure(function(self, ...) local method = getnamecallmethod() if method == "Kick" and getgenv().AntiKickEnabled and self == LocalPlayer then return end return oldNamecall(self, ...) end) setreadonly(mt, true) Fluent:Notify({ Title = "Anti-Kick", Content = "Protection active!", Duration = 3 }) end end }) -- 3. Unload Script Button Tabs.Settings:AddButton({ Title = "3. Unload Script", Description = "Completely removes the UI, ESP drawings, and background loops", Callback = function() FOVCircle:Remove() for _, drawings in pairs(espDrawings) do for _, d in pairs(drawings) do d:Remove() end end if CoreGui:FindFirstChild("VoidToggleBtnGui") then CoreGui.VoidToggleBtnGui:Destroy() end Window:Destroy() Fluent:Notify({ Title = "Unloaded", Content = "Script successfully cleaned up!", Duration = 3 }) end }) -- 4. Server Hop Button Tabs.Settings:AddButton({ Title = "4. Server Hop", Description = "Teleports you to a different server instance", Callback = function() local servers = {} local req = game:HttpGet("https://games.roblox.com/v1/games/" .. game.PlaceId .. "/servers/Public?sortOrder=Asc&limit=100") local data = game:GetService("HttpService"):JSONDecode(req) for _, s in ipairs(data.data) do if s.playing < s.maxPlayers and s.id ~= game.JobId then table.insert(servers, s.id) end end if #servers > 0 then TeleportService:TeleportToPlaceInstance(game.PlaceId, servers[math.random(1, #servers)], LocalPlayer) else Fluent:Notify({ Title = "Server Hop", Content = "No other servers found!", Duration = 3 }) end end }) -- 5. Rejoin Button Tabs.Settings:AddButton({ Title = "5. Rejoin Server", Description = "Rejoins the exact same game server", Callback = function() TeleportService:Teleport(game.PlaceId, LocalPlayer) end }) SaveManager:SetLibrary(Fluent) InterfaceManager:SetLibrary(Fluent) SaveManager:IgnoreThemeSettings() SaveManager:SetIgnoreIndexes({}) InterfaceManager:BuildInterfaceSection(Tabs.Settings) SaveManager:BuildConfigSection(Tabs.Settings) Window:SelectTab(1) -- Mobile Toggle Button if CoreGui:FindFirstChild("VoidToggleBtnGui") then CoreGui.VoidToggleBtnGui:Destroy() end local ToggleGui = Instance.new("ScreenGui") ToggleGui.Name = "VoidToggleBtnGui" ToggleGui.IgnoreGuiInset = true ToggleGui.Parent = CoreGui local OpenButton = Instance.new("TextButton") OpenButton.Size = UDim2.new(0, 45, 0, 45) OpenButton.Position = UDim2.new(0, 15, 0.5, -22) OpenButton.BackgroundColor3 = Color3.fromRGB(25, 20, 32) OpenButton.TextColor3 = Color3.fromRGB(255, 90, 185) OpenButton.TextSize = 16 OpenButton.Font = Enum.Font.GothamBold OpenButton.Text = "🔥" OpenButton.Active = true OpenButton.Draggable = true OpenButton.Parent = ToggleGui local ToggleCorner = Instance.new("UICorner") ToggleCorner.CornerRadius = UDim.new(0, 8) ToggleCorner.Parent = OpenButton local ToggleStroke = Instance.new("UIStroke") ToggleStroke.Color = Color3.fromRGB(255, 90, 185) ToggleStroke.Thickness = 2 ToggleStroke.Parent = OpenButton local isOpen = true OpenButton.MouseButton1Click:Connect(function() isOpen = not isOpen Window:Minimize() end) Fluent:Notify({ Title = "VOID Hub Loaded", Content = "Center-screen Aimbot with Smooth slider locked and ready, kuya!", Duration = 5 }) SaveManager:LoadAutoloadConfig()