--======================================================== -- EVADE AFK -- -- RightShift = Open / close menu -- P = Toggle orbit -- -- ONLY: -- 1. Orbit -- 2. Auto Revive -- -- Orbit persists through character respawns. --======================================================== local Players = game:GetService("Players") local UIS = game:GetService("UserInputService") local RunService = game:GetService("RunService") local Player = Players.LocalPlayer local PlayerGui = Player:WaitForChild("PlayerGui") --======================================================== -- SETTINGS --======================================================== local ORBIT_RADIUS = 30 local ORBIT_SPEED = 2 local ORBIT_HEIGHT = 500000 local REVIVE_OFFSET = -5 local REVIVE_HOLD_TIME = 15 --======================================================== -- STATE --======================================================== local OrbitEnabled = false local AutoReviveEnabled = false local OrbitAngle = 0 local OrbitOrigin = nil local Reviving = false local CurrentPrompt = nil --======================================================== -- CHARACTER --======================================================== local function GetCharacter() local Character = Player.Character if not Character then return nil end local Root = Character:FindFirstChild("HumanoidRootPart") local Humanoid = Character:FindFirstChildOfClass("Humanoid") if not Root or not Humanoid then return nil end return Character, Root, Humanoid end --======================================================== -- REMOVE OLD UI --======================================================== local OldGUI = PlayerGui:FindFirstChild("EvadeAFK") if OldGUI then OldGUI:Destroy() end --======================================================== -- GUI --======================================================== local GUI = Instance.new("ScreenGui") GUI.Name = "EvadeAFK" GUI.ResetOnSpawn = false GUI.IgnoreGuiInset = true GUI.DisplayOrder = 999999 GUI.ZIndexBehavior = Enum.ZIndexBehavior.Sibling GUI.Parent = PlayerGui local Main = Instance.new("Frame") Main.Name = "Main" Main.Size = UDim2.fromOffset(330, 220) Main.Position = UDim2.new( 0.5, -165, 0.5, -110 ) Main.BackgroundColor3 = Color3.fromRGB(12, 12, 18) Main.BorderSizePixel = 0 Main.Visible = false Main.ZIndex = 100 Main.Parent = GUI local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 14) Corner.Parent = Main local Stroke = Instance.new("UIStroke") Stroke.Color = Color3.fromRGB(135, 65, 255) Stroke.Thickness = 2 Stroke.Parent = Main --======================================================== -- TITLE --======================================================== local Title = Instance.new("TextLabel") Title.Size = UDim2.new(1, 0, 0, 55) Title.BackgroundTransparency = 1 Title.Text = "EVADE AFK" Title.TextColor3 = Color3.new(1, 1, 1) Title.Font = Enum.Font.GothamBold Title.TextSize = 24 Title.ZIndex = 101 Title.Parent = Main --======================================================== -- BUTTON CREATOR --======================================================== local function CreateButton(Text, Y) local Button = Instance.new("TextButton") Button.Position = UDim2.fromOffset(20, Y) Button.Size = UDim2.new( 1, -40, 0, 45 ) Button.BackgroundColor3 = Color3.fromRGB(55, 55, 65) Button.BorderSizePixel = 0 Button.Text = Text Button.TextColor3 = Color3.new(1, 1, 1) Button.Font = Enum.Font.GothamBold Button.TextSize = 14 Button.ZIndex = 101 Button.Parent = Main local ButtonCorner = Instance.new("UICorner") ButtonCorner.CornerRadius = UDim.new(0, 10) ButtonCorner.Parent = Button return Button end --======================================================== -- BUTTONS --======================================================== local OrbitButton = CreateButton( "ORBIT: OFF", 65 ) local ReviveButton = CreateButton( "AUTO REVIVE: OFF", 120 ) --======================================================== -- INFO --======================================================== local Info = Instance.new("TextLabel") Info.Position = UDim2.fromOffset(10, 172) Info.Size = UDim2.new( 1, -20, 0, 35 ) Info.BackgroundTransparency = 1 Info.Text = "Right Shift = Menu • P = Orbit" Info.TextColor3 = Color3.fromRGB(150, 150, 165) Info.Font = Enum.Font.Gotham Info.TextSize = 12 Info.ZIndex = 101 Info.Parent = Main --======================================================== -- UI UPDATE --======================================================== local function UpdateUI() if OrbitEnabled then OrbitButton.Text = "ORBIT: ON [P]" OrbitButton.BackgroundColor3 = Color3.fromRGB(105, 55, 210) else OrbitButton.Text = "ORBIT: OFF [P]" OrbitButton.BackgroundColor3 = Color3.fromRGB(55, 55, 65) end if AutoReviveEnabled then if Reviving then ReviveButton.Text = "AUTO REVIVE: REVIVING..." else ReviveButton.Text = "AUTO REVIVE: ON" end ReviveButton.BackgroundColor3 = Color3.fromRGB(45, 150, 90) else ReviveButton.Text = "AUTO REVIVE: OFF" ReviveButton.BackgroundColor3 = Color3.fromRGB(55, 55, 65) end end --======================================================== -- DOWNED DETECTION --======================================================== local function IsDowned(Character) if not Character then return false end -- Attributes if Character:GetAttribute("Downed") == true then return true end if Character:GetAttribute("downed") == true then return true end if Character:GetAttribute("DBNO") == true then return true end -- BoolValues for _, Name in ipairs({ "Downed", "downed", "DBNO", "Knocked", "knocked" }) do local Value = Character:FindFirstChild(Name) if Value and Value:IsA("BoolValue") and Value.Value then return true end end return false end --======================================================== -- FIND E PROMPT --======================================================== local function FindEPrompt(Character) if not Character then return nil end for _, Object in ipairs( Character:GetDescendants() ) do if Object:IsA("ProximityPrompt") and Object.Enabled and Object.KeyboardKeyCode == Enum.KeyCode.E then return Object end end return nil end --======================================================== -- FIND DOWNED PLAYER --======================================================== local function FindDownedPlayer() local MyCharacter, MyRoot = GetCharacter() if not MyRoot then return nil end local ClosestPlayer = nil local ClosestDistance = math.huge for _, Target in ipairs( Players:GetPlayers() ) do if Target ~= Player then local Character = Target.Character if Character and IsDowned(Character) then local Root = Character: FindFirstChild( "HumanoidRootPart" ) if Root then local Distance = ( Root.Position - MyRoot.Position ).Magnitude if Distance < ClosestDistance then ClosestDistance = Distance ClosestPlayer = Target end end end end end return ClosestPlayer end --======================================================== -- ORBIT --======================================================== local function StartOrbit() local Character, Root = GetCharacter() if not Root then return end OrbitOrigin = Root.Position OrbitAngle = 0 OrbitEnabled = true UpdateUI() end local function StopOrbit() OrbitEnabled = false local Character, Root, Humanoid = GetCharacter() if Root then Root.Anchored = false Root.AssemblyLinearVelocity = Vector3.zero Root.AssemblyAngularVelocity = Vector3.zero end if Humanoid then Humanoid.AutoRotate = true end UpdateUI() end local function ToggleOrbit() if OrbitEnabled then StopOrbit() else StartOrbit() end end --======================================================== -- ORBIT LOOP --======================================================== RunService.RenderStepped: Connect(function(DT) if not OrbitEnabled then return end -- Revive gets priority. if Reviving then return end local Character, Root, Humanoid = GetCharacter() if not Root then return end -- If character respawned, -- recreate an origin automatically. if not OrbitOrigin then OrbitOrigin = Root.Position end Root.Anchored = true Humanoid.AutoRotate = false OrbitAngle += ORBIT_SPEED * DT local Center = OrbitOrigin + Vector3.new( 0, ORBIT_HEIGHT, 0 ) local Offset = Vector3.new( math.cos(OrbitAngle) * ORBIT_RADIUS, 0, math.sin(OrbitAngle) * ORBIT_RADIUS ) Root.CFrame = CFrame.new( Center + Offset ) * CFrame.Angles( 0, -OrbitAngle, 0 ) end) --======================================================== -- AUTO REVIVE --======================================================== task.spawn(function() while GUI.Parent do task.wait(0.1) if not AutoReviveEnabled then continue end if Reviving then continue end local Target = FindDownedPlayer() if not Target then continue end local TargetCharacter = Target.Character if not TargetCharacter then continue end local TargetRoot = TargetCharacter: FindFirstChild( "HumanoidRootPart" ) if not TargetRoot then continue end local Prompt = FindEPrompt( TargetCharacter ) if not Prompt then continue end local MyCharacter, MyRoot, MyHumanoid = GetCharacter() if not MyRoot then continue end --============================================ -- START REVIVE --============================================ Reviving = true UpdateUI() MyRoot.Anchored = false MyRoot.AssemblyLinearVelocity = Vector3.zero MyRoot.AssemblyAngularVelocity = Vector3.zero -- Start holding E. CurrentPrompt = Prompt Prompt:InputHoldBegin() local StartTime = os.clock() --============================================ -- HOLD FOR 15 SECONDS --============================================ while AutoReviveEnabled and (os.clock() - StartTime) < REVIVE_HOLD_TIME do -- Target disappeared? if not TargetCharacter.Parent then break end TargetRoot = TargetCharacter: FindFirstChild( "HumanoidRootPart" ) if not TargetRoot then break end if not MyRoot.Parent then break end -- Stay exactly 5 studs -- underneath them. MyRoot.CFrame = TargetRoot.CFrame * CFrame.new( 0, REVIVE_OFFSET, 0 ) MyRoot.AssemblyLinearVelocity = Vector3.zero MyRoot.AssemblyAngularVelocity = Vector3.zero RunService.Heartbeat:Wait() end --============================================ -- RELEASE E --============================================ pcall(function() Prompt:InputHoldEnd() end) CurrentPrompt = nil Reviving = false --============================================ -- RETURN TO ORBIT --============================================ if OrbitEnabled then local Character, NewRoot = GetCharacter() if NewRoot then NewRoot.Anchored = true end end UpdateUI() -- Small delay before finding -- another downed player. task.wait(0.1) end end) --======================================================== -- BUTTONS --======================================================== OrbitButton.MouseButton1Click: Connect(function() ToggleOrbit() end) ReviveButton.MouseButton1Click: Connect(function() AutoReviveEnabled = not AutoReviveEnabled -- Immediately release E -- if user disables Auto Revive. if not AutoReviveEnabled and CurrentPrompt then pcall(function() CurrentPrompt: InputHoldEnd() end) CurrentPrompt = nil Reviving = false end UpdateUI() end) --======================================================== -- KEYBINDS --======================================================== UIS.InputBegan: Connect(function(Input, Processed) -- RIGHT SHIFT ALWAYS TOGGLES MENU if Input.KeyCode == Enum.KeyCode.RightShift then Main.Visible = not Main.Visible return end if Processed then return end -- P = ORBIT if Input.KeyCode == Enum.KeyCode.P then ToggleOrbit() end end) --======================================================== -- ROUND / RESPAWN HANDLING --======================================================== Player.CharacterAdded: Connect(function(Character) -- IMPORTANT: -- Do NOT change OrbitEnabled here. -- Do NOT change AutoReviveEnabled here. -- -- Therefore a respawn/round reset -- doesn't disable either feature. Reviving = false CurrentPrompt = nil local Root = Character: WaitForChild( "HumanoidRootPart", 10 ) if not Root then return end -- New origin for new character, -- while keeping orbit ON. OrbitOrigin = Root.Position OrbitAngle = 0 task.wait(0.2) if OrbitEnabled and Root.Parent then Root.Anchored = true end UpdateUI() end) --======================================================== -- INITIAL UI --======================================================== UpdateUI() print("--------------------------------") print("EVADE AFK LOADED") print("Right Shift = Menu") print("P = Orbit") print("Orbit persists through respawns") print("Auto Revive hold = 15 seconds") print("--------------------------------")