local WindUI = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))() local Window = WindUI:CreateWindow({ Title = "Vortex Hub", Icon = "gamepad-2", -- lucide icon Author = "by the official Vortex!", Folder = "VortexHub", -- ↓ This all is Optional. You can remove it. Size = UDim2.fromOffset(580, 460), MinSize = Vector2.new(560, 350), MaxSize = Vector2.new(850, 560), Transparent = true, Theme = "Dark", Resizable = true, SideBarWidth = 200, BackgroundImageTransparency = 0.42, HideSearchBar = true, ScrollBarEnabled = false, -- ↓ Optional. You can remove it. --[[ You can set 'rbxassetid://' or video to Background. 'rbxassetid://': Background = "rbxassetid://", -- rbxassetid Video: Background = "video:YOUR-RAW-LINK-TO-VIDEO.webm", -- video --]] -- ↓ Optional. You can remove it. User = { Enabled = true, Anonymous = false, Callback = function() print("User Info Clicked") end, }, -- remove this all, -- ! ↓ if you DON'T need the key system KeySystem = { -- ↓ Optional. You can remove it. Key = { "BotVerification", "0000" }, Note = "Type BotVerification or 0000 to get access to the hub.", -- ↓ Optional. You can remove it. SaveKey = true, -- automatically save and load the key. -- ↓ Optional. You can remove it. -- API = {} ← Services. Read about it below ↓ }, }) local Tab = Window:Tab({ Title = "Local Player", Icon = "user", -- optional Locked = false, }) local Players = game:GetService("Players") local player = Players.LocalPlayer local currentSpeed = 16 local SPeedSlider = Tab:Slider({ Title = "Walkspeed Slider", Desc = "Set Walkspeed Using This Slider.", Step = 1, Value = { Min = 16, Max = 250, Default = 16, }, Callback = function(value) currentSpeed = value local char = player.Character or player.CharacterAdded:Wait() local humanoid = char:FindFirstChildOfClass("Humanoid") if humanoid then humanoid.WalkSpeed = value end end }) -- keep after respawn player.CharacterAdded:Connect(function(char) local humanoid = char:WaitForChild("Humanoid") humanoid.WalkSpeed = currentSpeed end) local Players = game:GetService("Players") local player = Players.LocalPlayer local currentJump = 50 local JumpSlider = Tab:Slider({ Title = "Jumppower Slider", Desc = "Set Jumppower Using This Slider.", Step = 1, Value = { Min = 50, Max = 500, Default = 50, }, Callback = function(value) currentJump = value local char = player.Character or player.CharacterAdded:Wait() local humanoid = char:FindFirstChildOfClass("Humanoid") if humanoid then humanoid.JumpPower = value end end }) -- keep after respawn player.CharacterAdded:Connect(function(char) local humanoid = char:WaitForChild("Humanoid") humanoid.JumpPower = currentJump end) local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local player = Players.LocalPlayer local infJumpEnabled = false local infJumpToggle = Tab:Toggle({ Title = "Infinite Jump", Desc = "Jump in the air endlessly", Icon = "plane", Type = "Checkbox", Value = false, Callback = function(state) infJumpEnabled = state print("Infinite Jump: " .. tostring(state)) end }) UserInputService.JumpRequest:Connect(function() if infJumpEnabled then local char = player.Character if char then local humanoid = char:FindFirstChildOfClass("Humanoid") if humanoid then humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end end end end) local player = game:GetService("Players").LocalPlayer local function setTiny(state) local char = player.Character if not char then return end local humanoid = char:FindFirstChildOfClass("Humanoid") if not humanoid then return end -- reset FIRST (important) for _, v in pairs(humanoid:GetChildren()) do if v:IsA("NumberValue") and v.Name:find("Scale") then v.Value = 1 end end if state then -- apply tiny AFTER reset if humanoid:FindFirstChild("BodyHeightScale") then humanoid.BodyHeightScale.Value = 0.3 humanoid.BodyWidthScale.Value = 0.3 humanoid.BodyDepthScale.Value = 0.3 humanoid.HeadScale.Value = 0.3 end end end -- 🔹 INVISIBLE TOGGLE local invisEnabled = false local InvisToggle = Tab:Toggle({ Title = "Become Invisible", Desc = "Make Your Character Invisible.", Icon = "hat-glasses", Type = "Checkbox", Value = false, Callback = function(state) invisEnabled = state local char = player.Character if not char then return end for _, v in pairs(char:GetDescendants()) do if v:IsA("BasePart") then v.Transparency = state and 1 or 0 v.CanCollide = not state -- optional elseif v:IsA("Decal") then v.Transparency = state and 1 or 0 end end end }) local Players = game:GetService("Players") local RunService = game:GetService("RunService") local player = Players.LocalPlayer local noclipEnabled = false local NoclipToggle = Tab:Toggle({ Title = "Noclip", Desc = "Walk through walls", Icon = "ghost", Type = "Checkbox", Value = false, Callback = function(state) noclipEnabled = state print("Noclip: " .. tostring(state)) end }) -- 🔥 Noclip loop (runs every frame) RunService.Stepped:Connect(function() if noclipEnabled then local char = player.Character if char then for _, v in pairs(char:GetDescendants()) do if v:IsA("BasePart") then v.CanCollide = false end end end end end) local Players = game:GetService("Players") local RunService = game:GetService("RunService") local player = Players.LocalPlayer local VisualsTab = Window:Tab({ Title = "Visuals", Icon = "eye" }) --// SERVICES local Players = game:GetService("Players") local RunService = game:GetService("RunService") local player = Players.LocalPlayer --// STATES local MurdererESP = false local SheriffESP = false local InnocentESP = false local GunESP = false local CoinESP = false --// UI (PUT THIS IN YOUR VISUALS TAB) VisualsTab:Toggle({ Title = "Murderer ESP", Value = false, Callback = function(v) MurdererESP = v end }) VisualsTab:Toggle({ Title = "Sheriff ESP", Value = false, Callback = function(v) SheriffESP = v end }) VisualsTab:Toggle({ Title = "Innocent ESP", Value = false, Callback = function(v) InnocentESP = v end }) VisualsTab:Toggle({ Title = "Gun ESP", Value = false, Callback = function(v) GunESP = v end }) VisualsTab:Toggle({ Title = "Coin ESP", Value = false, Callback = function(v) CoinESP = v end }) --// ESP FUNCTIONS local function addHighlight(obj, color) if not obj then return end local hl = obj:FindFirstChild("ESP") if not hl then hl = Instance.new("Highlight") hl.Name = "ESP" hl.Parent = obj end hl.FillColor = color hl.OutlineColor = color hl.FillTransparency = 0.4 end local function removeHighlight(obj) if obj and obj:FindFirstChild("ESP") then obj.ESP:Destroy() end end --// ROLE DETECTION (BETTER) local function getRole(plr) local function check(container) if not container then return end for _, v in pairs(container:GetChildren()) do if v:IsA("Tool") then local name = v.Name:lower() if name:find("knife") then return "Murderer" end if name:find("gun") then return "Sheriff" end end end end return check(plr.Character) or check(plr:FindFirstChild("Backpack")) or "Innocent" end --// MAIN LOOP (STABLE) RunService.Heartbeat:Connect(function() for _, plr in pairs(Players:GetPlayers()) do if plr ~= player and plr.Character then local role = getRole(plr) if role == "Murderer" and MurdererESP then addHighlight(plr.Character, Color3.fromRGB(255,0,0)) elseif role == "Sheriff" and SheriffESP then addHighlight(plr.Character, Color3.fromRGB(0,0,255)) elseif role == "Innocent" and InnocentESP then addHighlight(plr.Character, Color3.fromRGB(0,255,0)) else removeHighlight(plr.Character) end end end -- 🔫 GunDrop ESP (FIXED SEARCH) if GunESP then local gun = workspace:FindFirstChild("GunDrop", true) if gun then addHighlight(gun, Color3.fromRGB(255,255,0)) end end -- 🪙 Coin ESP (NEAR ONLY = LESS LAG) if CoinESP and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then local root = player.Character.HumanoidRootPart for _, v in pairs(workspace:GetDescendants()) do if v:IsA("BasePart") and v.Name:lower():find("coin") then if (v.Position - root.Position).Magnitude < 80 then addHighlight(v, Color3.fromRGB(255,215,0)) end end end end end) --// SERVICES local Players = game:GetService("Players") local RunService = game:GetService("RunService") local player = Players.LocalPlayer local camera = workspace.CurrentCamera --// SETTINGS local AimMode = "Automatic" local trackingEnabled = false --// ================= UI ================= VisualsTab:Dropdown({ Title = "Target Mode", Values = {"Murderer", "Sheriff", "Automatic"}, Value = "Automatic", Callback = function(v) AimMode = v end }) VisualsTab:Toggle({ Title = "Aim Tracking", Value = false, Callback = function(v) trackingEnabled = v end }) --// ================= ROLE DETECTION ================= local function getRole(plr) local function check(container) if not container then return end for _, v in pairs(container:GetChildren()) do if v:IsA("Tool") then local name = v.Name:lower() if name:find("knife") then return "Murderer" end if name:find("gun") then return "Sheriff" end end end end return check(plr.Character) or check(plr:FindFirstChild("Backpack")) or "Innocent" end --// ================= TARGET FINDER ================= local function getTarget() local closest = nil local shortest = math.huge if not player.Character or not player.Character:FindFirstChild("HumanoidRootPart") then return nil end local myRole = getRole(player) for _, plr in pairs(Players:GetPlayers()) do if plr ~= player and plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") then local role = getRole(plr) local valid = false if AimMode == "Murderer" and role == "Murderer" then valid = true elseif AimMode == "Sheriff" and role == "Sheriff" then valid = true elseif AimMode == "Automatic" then if myRole == "Sheriff" and role == "Murderer" then valid = true elseif myRole == "Murderer" then valid = true end end if valid then local dist = (plr.Character.HumanoidRootPart.Position - player.Character.HumanoidRootPart.Position).Magnitude if dist < shortest then shortest = dist closest = plr end end end end return closest end --// ================= TRACK LOOP ================= RunService.RenderStepped:Connect(function() if not trackingEnabled then return end if not player.Character or not player.Character:FindFirstChild("HumanoidRootPart") then return end local target = getTarget() if target and target.Character and target.Character:FindFirstChild("HumanoidRootPart") then local camPos = camera.CFrame.Position local targetPos = target.Character.HumanoidRootPart.Position -- ⚡ INSTANT TRACK camera.CFrame = CFrame.new(camPos, targetPos) end end) local Players = game:GetService("Players") local TweenService = game:GetService("TweenService") local player = Players.LocalPlayer local CoinFarmEnabled = false local TweenSpeed = 50 -- Toggle Tab:Toggle({ Title = "Coin Farm", Desc = "Tween to random coins", Icon = "coins", Type = "Checkbox", Value = false, Callback = function(state) CoinFarmEnabled = state end }) -- Speed Slider Tab:Slider({ Title = "Coin Tween Speed", Desc = "Change how fast you move", Step = 1, Value = { Min = 10, Max = 200, Default = 50, }, Callback = function(value) TweenSpeed = value end }) -- Find coins local function getCoins() local coins = {} for _, obj in pairs(workspace:GetDescendants()) do if obj:IsA("BasePart") then if obj.Name:lower():find("coin") then table.insert(coins, obj) end end end return coins end -- Tween player local function tweenToCoin(coin) local character = player.Character if not character then return end local root = character:FindFirstChild("HumanoidRootPart") if not root then return end local distance = (root.Position - coin.Position).Magnitude local time = distance / TweenSpeed local tween = TweenService:Create( root, TweenInfo.new( time, Enum.EasingStyle.Linear ), { CFrame = coin.CFrame + Vector3.new(0, 3, 0) } ) tween:Play() tween.Completed:Wait() end -- Farm loop task.spawn(function() while true do if CoinFarmEnabled then local coins = getCoins() if #coins > 0 then local randomCoin = coins[math.random(1, #coins)] tweenToCoin(randomCoin) end end task.wait(0.2) end end)