-- I only reuploaded this, I didn't make anything myself. --[[ AirHub V2 by Exunys © CC0 1.0 Universal (2023) https://github.com/Exunys ]] --// Loaded Check if AirHubV2Loaded or AirHubV2Loading or AirHub then return end getgenv().AirHubV2Loading = true --// Cache local game = game local loadstring, typeof, select, next, pcall = loadstring, typeof, select, next, pcall local tablefind, tablesort = table.find, table.sort local mathfloor = math.floor local stringgsub = string.gsub local wait, delay, spawn = task.wait, task.delay, task.spawn local osdate = os.date --// Launching loadstring(game:HttpGet("https://raw.githubusercontent.com/Exunys/Roblox-Functions-Library/main/Library.lua"))() local GUI = loadstring(game:HttpGet("https://raw.githubusercontent.com/Exunys/AirHub-V2/main/src/UI%20Library.lua"))() local ESP = loadstring(game:HttpGet("https://raw.githubusercontent.com/Exunys/Exunys-ESP/main/src/ESP.lua"))() local Aimbot = loadstring(game:HttpGet("https://raw.githubusercontent.com/Exunys/Aimbot-V3/main/src/Aimbot.lua"))() --// Variables local MainFrame = GUI:Load() local ESP_DeveloperSettings = ESP.DeveloperSettings local ESP_Settings = ESP.Settings local ESP_Properties = ESP.Properties local Crosshair = ESP_Properties.Crosshair local CenterDot = Crosshair.CenterDot local Aimbot_DeveloperSettings = Aimbot.DeveloperSettings local Aimbot_Settings = Aimbot.Settings local Aimbot_FOV = Aimbot.FOVSettings ESP_Settings.LoadConfigOnLaunch = false ESP_Settings.Enabled = false Crosshair.Enabled = false Aimbot_Settings.Enabled = false local Fonts = {"UI", "System", "Plex", "Monospace"} local TracerPositions = {"Bottom", "Center", "Mouse"} local HealthBarPositions = {"Top", "Bottom", "Left", "Right"} --// Tabs local General, GeneralSignal = MainFrame:Tab("General") local _Aimbot = MainFrame:Tab("Aimbot") local _ESP = MainFrame:Tab("ESP") local _Crosshair = MainFrame:Tab("Crosshair") local Settings = MainFrame:Tab("Settings") --// Functions local AddValues = function(Section, Object, Exceptions, Prefix) local Keys, Copy = {}, {} for Index, _ in next, Object do Keys[#Keys + 1] = Index end tablesort(Keys, function(A, B) return A < B end) for _, Value in next, Keys do Copy[Value] = Object[Value] end for Index, Value in next, Copy do if typeof(Value) ~= "boolean" or (Exceptions and tablefind(Exceptions, Index)) then continue end Section:Toggle({ Name = stringgsub(Index, "(%l)(%u)", function(...) return select(1, ...).." "..select(2, ...) end), Flag = Prefix..Index, Default = Value, Callback = function(_Value) Object[Index] = _Value end }) end for Index, Value in next, Copy do if typeof(Value) ~= "Color3" or (Exceptions and tablefind(Exceptions, Index)) then continue end Section:Colorpicker({ Name = stringgsub(Index, "(%l)(%u)", function(...) return select(1, ...).." "..select(2, ...) end), Flag = Index, Default = Value, Callback = function(_Value) Object[Index] = _Value end }) end end --// General Tab local AimbotSection = General:Section({ Name = "Aimbot Settings", Side = "Left" }) local ESPSection = General:Section({ Name = "ESP Settings", Side = "Right" }) local ESPDeveloperSection = General:Section({ Name = "ESP Developer Settings", Side = "Right" }) AddValues(ESPDeveloperSection, ESP_DeveloperSettings, {}, "ESP_DeveloperSettings_") ESPDeveloperSection:Dropdown({ Name = "Update Mode", Flag = "ESP_UpdateMode", Content = {"RenderStepped", "Stepped", "Heartbeat"}, Default = ESP_DeveloperSettings.UpdateMode, Callback = function(Value) ESP_DeveloperSettings.UpdateMode = Value end }) ESPDeveloperSection:Dropdown({ Name = "Team Check Option", Flag = "ESP_TeamCheckOption", Content = {"TeamColor", "Team"}, Default = ESP_DeveloperSettings.TeamCheckOption, Callback = function(Value) ESP_DeveloperSettings.TeamCheckOption = Value end }) ESPDeveloperSection:Slider({ Name = "Rainbow Speed", Flag = "ESP_RainbowSpeed", Default = ESP_DeveloperSettings.RainbowSpeed * 10, Min = 5, Max = 30, Callback = function(Value) ESP_DeveloperSettings.RainbowSpeed = Value / 10 end }) ESPDeveloperSection:Slider({ Name = "Width Boundary", Flag = "ESP_WidthBoundary", Default = ESP_DeveloperSettings.WidthBoundary * 10, Min = 5, Max = 30, Callback = function(Value) ESP_DeveloperSettings.WidthBoundary = Value / 10 end }) ESPDeveloperSection:Button({ Name = "Refresh", Callback = function() ESP:Restart() end }) AddValues(ESPSection, ESP_Settings, {"LoadConfigOnLaunch", "PartsOnly"}, "ESPSettings_") AimbotSection:Toggle({ Name = "Enabled", Flag = "Aimbot_Enabled", Default = Aimbot_Settings.Enabled, Callback = function(Value) Aimbot_Settings.Enabled = Value end }) AddValues(AimbotSection, Aimbot_Settings, {"Enabled", "Toggle", "OffsetToMoveDirection"}, "Aimbot_") local AimbotDeveloperSection = General:Section({ Name = "Aimbot Developer Settings", Side = "Left" }) AimbotDeveloperSection:Dropdown({ Name = "Update Mode", Flag = "Aimbot_UpdateMode", Content = {"RenderStepped", "Stepped", "Heartbeat"}, Default = Aimbot_DeveloperSettings.UpdateMode, Callback = function(Value) Aimbot_DeveloperSettings.UpdateMode = Value end }) AimbotDeveloperSection:Dropdown({ Name = "Team Check Option", Flag = "Aimbot_TeamCheckOption", Content = {"TeamColor", "Team"}, Default = Aimbot_DeveloperSettings.TeamCheckOption, Callback = function(Value) Aimbot_DeveloperSettings.TeamCheckOption = Value end }) AimbotDeveloperSection:Slider({ Name = "Rainbow Speed", Flag = "Aimbot_RainbowSpeed", Default = Aimbot_DeveloperSettings.RainbowSpeed * 10, Min = 5, Max = 30, Callback = function(Value) Aimbot_DeveloperSettings.RainbowSpeed = Value / 10 end }) AimbotDeveloperSection:Button({ Name = "Refresh", Callback = function() Aimbot.Restart() end }) --// Aimbot Tab local AimbotPropertiesSection = _Aimbot:Section({ Name = "Properties", Side = "Left" }) AimbotPropertiesSection:Toggle({ Name = "Toggle", Flag = "Aimbot_Toggle", Default = Aimbot_Settings.Toggle, Callback = function(Value) Aimbot_Settings.Toggle = Value end }) AimbotPropertiesSection:Toggle({ Name = "Offset To Move Direction", Flag = "Aimbot_OffsetToMoveDirection", Default = Aimbot_Settings.OffsetToMoveDirection, Callback = function(Value) Aimbot_Settings.OffsetToMoveDirection = Value end }) AimbotPropertiesSection:Slider({ Name = "Offset Increment", Flag = "Aimbot_OffsetIncrementy", Default = Aimbot_Settings.OffsetIncrement, Min = 1, Max = 30, Callback = function(Value) Aimbot_Settings.OffsetIncrement = Value end }) AimbotPropertiesSection:Slider({ Name = "Animation Sensitivity (ms)", Flag = "Aimbot_Sensitivity", Default = Aimbot_Settings.Sensitivity * 100, Min = 0, Max = 100, Callback = function(Value) Aimbot_Settings.Sensitivity = Value / 100 end }) AimbotPropertiesSection:Slider({ Name = "mousemoverel Sensitivity", Flag = "Aimbot_Sensitivity2", Default = Aimbot_Settings.Sensitivity2 * 100, Min = 0, Max = 500, Callback = function(Value) Aimbot_Settings.Sensitivity2 = Value / 100 end }) AimbotPropertiesSection:Dropdown({ Name = "Lock Mode", Flag = "Aimbot_Settings_LockMode", Content = {"CFrame", "mousemoverel"}, Default = Aimbot_Settings.LockMode == 1 and "CFrame" or "mousemoverel", Callback = function(Value) Aimbot_Settings.LockMode = Value == "CFrame" and 1 or 2 end }) AimbotPropertiesSection:Dropdown({ Name = "Lock Part", Flag = "Aimbot_LockPart", Content = {"Head", "HumanoidRootPart", "Torso", "Left Arm", "Right Arm", "Left Leg", "Right Leg", "LeftHand", "RightHand", "LeftLowerArm", "RightLowerArm", "LeftUpperArm", "RightUpperArm", "LeftFoot", "LeftLowerLeg", "UpperTorso", "LeftUpperLeg", "RightFoot", "RightLowerLeg", "LowerTorso", "RightUpperLeg"}, Default = Aimbot_Settings.LockPart, Callback = function(Value) Aimbot_Settings.LockPart = Value end }) AimbotPropertiesSection:Keybind({ Name = "Trigger Key", Flag = "Aimbot_TriggerKey", Default = Aimbot_Settings.TriggerKey, Callback = function(Keybind) Aimbot_Settings.TriggerKey = Keybind end }) local UserBox = AimbotPropertiesSection:Box({ Name = "Player Name (shortened allowed)", Flag = "Aimbot_PlayerName", Placeholder = "Username" }) AimbotPropertiesSection:Button({ Name = "Blacklist (Ignore) Player", Callback = function() pcall(Aimbot.Blacklist, Aimbot, GUI.flags["Aimbot_PlayerName"]) UserBox:Set("") end }) AimbotPropertiesSection:Button({ Name = "Whitelist Player", Callback = function() pcall(Aimbot.Whitelist, Aimbot, GUI.flags["Aimbot_PlayerName"]) UserBox:Set("") end }) local AimbotFOVSection = _Aimbot:Section({ Name = "Field Of View Settings", Side = "Right" }) AddValues(AimbotFOVSection, Aimbot_FOV, {}, "Aimbot_FOV_") AimbotFOVSection:Slider({ Name = "Field Of View", Flag = "Aimbot_FOV_Radius", Default = Aimbot_FOV.Radius, Min = 0, Max = 720, Callback = function(Value) Aimbot_FOV.Radius = Value end }) AimbotFOVSection:Slider({ Name = "Sides", Flag = "Aimbot_FOV_NumSides", Default = Aimbot_FOV.NumSides, Min = 3, Max = 60, Callback = function(Value) Aimbot_FOV.NumSides = Value end }) AimbotFOVSection:Slider({ Name = "Transparency", Flag = "Aimbot_FOV_Transparency", Default = Aimbot_FOV.Transparency * 10, Min = 1, Max = 10, Callback = function(Value) Aimbot_FOV.Transparency = Value / 10 end }) AimbotFOVSection:Slider({ Name = "Thickness", Flag = "Aimbot_FOV_Thickness", Default = Aimbot_FOV.Thickness, Min = 1, Max = 5, Callback = function(Value) Aimbot_FOV.Thickness = Value end }) --// ESP Tab local ESP_Properties_Section = _ESP:Section({ Name = "ESP Properties", Side = "Left" }) AddValues(ESP_Properties_Section, ESP_Properties.ESP, {}, "ESP_Propreties_") ESP_Properties_Section:Dropdown({ Name = "Text Font", Flag = "ESP_TextFont", Content = Fonts, Default = Fonts[ESP_Properties.ESP.Font + 1], Callback = function(Value) ESP_Properties.ESP.Font = Drawing.Fonts[Value] end }) ESP_Properties_Section:Slider({ Name = "Transparency", Flag = "ESP_TextTransparency", Default = ESP_Properties.ESP.Transparency * 10, Min = 1, Max = 10, Callback = function(Value) ESP_Properties.ESP.Transparency = Value / 10 end }) ESP_Properties_Section:Slider({ Name = "Font Size", Flag = "ESP_FontSize", Default = ESP_Properties.ESP.Size, Min = 1, Max = 20, Callback = function(Value) ESP_Properties.ESP.Size = Value end }) ESP_Properties_Section:Slider({ Name = "Offset", Flag = "ESP_Offset", Default = ESP_Properties.ESP.Offset, Min = 10, Max = 30, Callback = function(Value) ESP_Properties.ESP.Offset = Value end }) local Tracer_Properties_Section = _ESP:Section({ Name = "Tracer Properties", Side = "Right" }) AddValues(Tracer_Properties_Section, ESP_Properties.Tracer, {}, "Tracer_Properties_") Tracer_Properties_Section:Dropdown({ Name = "Position", Flag = "Tracer_Position", Content = TracerPositions, Default = TracerPositions[ESP_Properties.Tracer.Position], Callback = function(Value) ESP_Properties.Tracer.Position = tablefind(TracerPositions, Value) end }) Tracer_Properties_Section:Slider({ Name = "Transparency", Flag = "Tracer_Transparency", Default = ESP_Properties.Tracer.Transparency * 10, Min = 1, Max = 10, Callback = function(Value) ESP_Properties.Tracer.Transparency = Value / 10 end }) Tracer_Properties_Section:Slider({ Name = "Thickness", Flag = "Tracer_Thickness", Default = ESP_Properties.Tracer.Thickness, Min = 1, Max = 5, Callback = function(Value) ESP_Properties.Tracer.Thickness = Value end }) local HeadDot_Properties_Section = _ESP:Section({ Name = "Head Dot Properties", Side = "Left" }) AddValues(HeadDot_Properties_Section, ESP_Properties.HeadDot, {}, "HeadDot_Properties_") HeadDot_Properties_Section:Slider({ Name = "Transparency", Flag = "HeadDot_Transparency", Default = ESP_Properties.HeadDot.Transparency * 10, Min = 1, Max = 10, Callback = function(Value) ESP_Properties.HeadDot.Transparency = Value / 10 end }) HeadDot_Properties_Section:Slider({ Name = "Thickness", Flag = "HeadDot_Thickness", Default = ESP_Properties.HeadDot.Thickness, Min = 1, Max = 5, Callback = function(Value) ESP_Properties.HeadDot.Thickness = Value end }) HeadDot_Properties_Section:Slider({ Name = "Sides", Flag = "HeadDot_Sides", Default = ESP_Properties.HeadDot.NumSides, Min = 3, Max = 30, Callback = function(Value) ESP_Properties.HeadDot.NumSides = Value end }) local Box_Properties_Section = _ESP:Section({ Name = "Box Properties", Side = "Left" }) AddValues(Box_Properties_Section, ESP_Properties.Box, {}, "Box_Properties_") Box_Properties_Section:Slider({ Name = "Transparency", Flag = "Box_Transparency", Default = ESP_Properties.Box.Transparency * 10, Min = 1, Max = 10, Callback = function(Value) ESP_Properties.Box.Transparency = Value / 10 end }) Box_Properties_Section:Slider({ Name = "Thickness", Flag = "Box_Thickness", Default = ESP_Properties.Box.Thickness, Min = 1, Max = 5, Callback = function(Value) ESP_Properties.Box.Thickness = Value end }) local HealthBar_Properties_Section = _ESP:Section({ Name = "Health Bar Properties", Side = "Right" }) AddValues(HealthBar_Properties_Section, ESP_Properties.HealthBar, {}, "HealthBar_Properties_") HealthBar_Properties_Section:Dropdown({ Name = "Position", Flag = "HealthBar_Position", Content = HealthBarPositions, Default = HealthBarPositions[ESP_Properties.HealthBar.Position], Callback = function(Value) ESP_Properties.HealthBar.Position = tablefind(HealthBarPositions, Value) end }) HealthBar_Properties_Section:Slider({ Name = "Transparency", Flag = "HealthBar_Transparency", Default = ESP_Properties.HealthBar.Transparency * 10, Min = 1, Max = 10, Callback = function(Value) ESP_Properties.HealthBar.Transparency = Value / 10 end }) HealthBar_Properties_Section:Slider({ Name = "Thickness", Flag = "HealthBar_Thickness", Default = ESP_Properties.HealthBar.Thickness, Min = 1, Max = 5, Callback = function(Value) ESP_Properties.HealthBar.Thickness = Value end }) HealthBar_Properties_Section:Slider({ Name = "Offset", Flag = "HealthBar_Offset", Default = ESP_Properties.HealthBar.Offset, Min = 4, Max = 12, Callback = function(Value) ESP_Properties.HealthBar.Offset = Value end }) HealthBar_Properties_Section:Slider({ Name = "Blue", Flag = "HealthBar_Blue", Default = ESP_Properties.HealthBar.Blue, Min = 0, Max = 255, Callback = function(Value) ESP_Properties.HealthBar.Blue = Value end }) --// Crosshair Tab local Crosshair_Settings = _Crosshair:Section({ Name = "Crosshair Settings (1 / 2)", Side = "Left" }) Crosshair_Settings:Toggle({ Name = "Enabled", Flag = "Crosshair_Enabled", Default = Crosshair.Enabled, Callback = function(Value) Crosshair.Enabled = Value end }) Crosshair_Settings:Toggle({ Name = "Enable ROBLOX Cursor", Flag = "Cursor_Enabled", Default = UserInputService.MouseIconEnabled, Callback = SetMouseIconVisibility }) AddValues(Crosshair_Settings, Crosshair, {"Enabled"}, "Crosshair_") Crosshair_Settings:Dropdown({ Name = "Position", Flag = "Crosshair_Position", Content = {"Mouse", "Center"}, Default = ({"Mouse", "Center"})[Crosshair.Position], Callback = function(Value) Crosshair.Position = Value == "Mouse" and 1 or 2 end }) Crosshair_Settings:Slider({ Name = "Size", Flag = "Crosshair_Size", Default = Crosshair.Size, Min = 1, Max = 24, Callback = function(Value) Crosshair.Size = Value end }) Crosshair_Settings:Slider({ Name = "Gap Size", Flag = "Crosshair_GapSize", Default = Crosshair.GapSize, Min = 0, Max = 24, Callback = function(Value) Crosshair.GapSize = Value end }) Crosshair_Settings:Slider({ Name = "Rotation (Degrees)", Flag = "Crosshair_Rotation", Default = Crosshair.Rotation, Min = -180, Max = 180, Callback = function(Value) Crosshair.Rotation = Value end }) Crosshair_Settings:Slider({ Name = "Rotation Speed", Flag = "Crosshair_RotationSpeed", Default = Crosshair.RotationSpeed, Min = 1, Max = 20, Callback = function(Value) Crosshair.RotationSpeed = Value end }) Crosshair_Settings:Slider({ Name = "Pulsing Step", Flag = "Crosshair_PulsingStep", Default = Crosshair.PulsingStep, Min = 0, Max = 24, Callback = function(Value) Crosshair.PulsingStep = Value end }) local _Crosshair_Settings = _Crosshair:Section({ Name = "Crosshair Settings (2 / 2)", Side = "Left" }) _Crosshair_Settings:Slider({ Name = "Pulsing Speed", Flag = "Crosshair_PulsingSpeed", Default = Crosshair.PulsingSpeed, Min = 1, Max = 20, Callback = function(Value) Crosshair.PulsingSpeed = Value end }) _Crosshair_Settings:Slider({ Name = "Pulsing Boundary (Min)", Flag = "Crosshair_Pulse_Min", Default = Crosshair.PulsingBounds[1], Min = 0, Max = 24, Callback = function(Value) Crosshair.PulsingBounds[1] = Value end }) _Crosshair_Settings:Slider({ Name = "Pulsing Boundary (Max)", Flag = "Crosshair_Pulse_Max", Default = Crosshair.PulsingBounds[2], Min = 0, Max = 24, Callback = function(Value) Crosshair.PulsingBounds[2] = Value end }) _Crosshair_Settings:Slider({ Name = "Transparency", Flag = "Crosshair_Transparency", Default = Crosshair.Transparency * 10, Min = 1, Max = 10, Callback = function(Value) Crosshair.Transparency = Value / 10 end }) _Crosshair_Settings:Slider({ Name = "Thickness", Flag = "Crosshair_Thickness", Default = Crosshair.Thickness, Min = 1, Max = 5, Callback = function(Value) Crosshair.Thickness = Value end }) local Crosshair_CenterDot = _Crosshair:Section({ Name = "Center Dot Settings", Side = "Right" }) Crosshair_CenterDot:Toggle({ Name = "Enabled", Flag = "Crosshair_CenterDot_Enabled", Default = CenterDot.Enabled, Callback = function(Value) CenterDot.Enabled = Value end }) AddValues(Crosshair_CenterDot, CenterDot, {"Enabled"}, "Crosshair_CenterDot_") Crosshair_CenterDot:Slider({ Name = "Size / Radius", Flag = "Crosshair_CenterDot_Radius", Default = CenterDot.Radius, Min = 2, Max = 8, Callback = function(Value) CenterDot.Radius = Value end }) Crosshair_CenterDot:Slider({ Name = "Sides", Flag = "Crosshair_CenterDot_Sides", Default = CenterDot.NumSides, Min = 3, Max = 30, Callback = function(Value) CenterDot.NumSides = Value end }) Crosshair_CenterDot:Slider({ Name = "Transparency", Flag = "Crosshair_CenterDot_Transparency", Default = CenterDot.Transparency * 10, Min = 1, Max = 10, Callback = function(Value) CenterDot.Transparency = Value / 10 end }) Crosshair_CenterDot:Slider({ Name = "Thickness", Flag = "Crosshair_CenterDot_Thickness", Default = CenterDot.Thickness, Min = 1, Max = 5, Callback = function(Value) CenterDot.Thickness = Value end }) --// Settings Tab local SettingsSection = Settings:Section({ Name = "Settings", Side = "Left" }) local ProfilesSection = Settings:Section({ Name = "Profiles", Side = "Left" }) local InformationSection = Settings:Section({ Name = "Information", Side = "Right" }) SettingsSection:Keybind({ Name = "Show / Hide GUI", Flag = "UI Toggle", Default = Enum.KeyCode.RightShift, Blacklist = {Enum.UserInputType.MouseButton1, Enum.UserInputType.MouseButton2, Enum.UserInputType.MouseButton3}, Callback = function(_, NewKeybind) if not NewKeybind then GUI:Close() end end }) SettingsSection:Button({ Name = "Unload Script", Callback = function() GUI:Unload() ESP:Exit() Aimbot:Exit() getgenv().AirHubV2Loaded = nil end }) local ConfigList = ProfilesSection:Dropdown({ Name = "Configurations", Flag = "Config Dropdown", Content = GUI:GetConfigs() }) ProfilesSection:Box({ Name = "Configuration Name", Flag = "Config Name", Placeholder = "Config Name" }) ProfilesSection:Button({ Name = "Load Configuration", Callback = function() GUI:LoadConfig(GUI.flags["Config Dropdown"]) end }) ProfilesSection:Button({ Name = "Delete Configuration", Callback = function() GUI:DeleteConfig(GUI.flags["Config Dropdown"]) ConfigList:Refresh(GUI:GetConfigs()) end }) ProfilesSection:Button({ Name = "Save Configuration", Callback = function() GUI:SaveConfig(GUI.flags["Config Dropdown"] or GUI.flags["Config Name"]) ConfigList:Refresh(GUI:GetConfigs()) end }) InformationSection:Label("Made by Exunys") InformationSection:Button({ Name = "Copy GitHub", Callback = function() setclipboard("https://github.com/Exunys") end }) InformationSection:Label("AirTeam © 2022 - "..osdate("%Y")) InformationSection:Button({ Name = "Copy Discord Invite", Callback = function() setclipboard("https://discord.gg/Ncz3H3quUZ") end }) --[=[ local MiscellaneousSection = Settings:Section({ Name = "Miscellaneous", Side = "Right" }) local TimeLabel = MiscellaneousSection:Label("...") local FPSLabel = MiscellaneousSection:Label("...") local PlayersLabel = MiscellaneousSection:Label("...") MiscellaneousSection:Button({ Name = "Rejoin", Callback = Rejoin }) delay(2, function() spawn(function() while wait(1) do TimeLabel:Set(osdate("%c")) PlayersLabel:Set(#Players:GetPlayers()) end end) RunService.RenderStepped:Connect(function(FPS) FPSLabel:Set("FPS: "..mathfloor(1 / FPS)) end) end) ]=] --// ESP.Load() Aimbot.Load() getgenv().AirHubV2Loaded = true getgenv().AirHubV2Loading = nil GeneralSignal:Fire() GUI:Close()