--[[ WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk! ]] local repo = "https://raw.githubusercontent.com/deividcomsono/Obsidian/main/" local Library = loadstring(game:HttpGet(repo .. "Library.lua"))() -- [[ SINGLETON CHECK (Using Library Notify) ]] -- if getgenv().ObsidianV1Running then Library:Notify("v1 is Already Running!", 5) return -- Stop the script end getgenv().ObsidianV1Running = true -- [[ END CHECK ]] -- local ThemeManager = loadstring(game:HttpGet(repo .. "addons/ThemeManager.lua"))() local SaveManager = loadstring(game:HttpGet(repo .. "addons/SaveManager.lua"))() task.wait(0.5) local Options = Library.Options local Toggles = Library.Toggles -- === LOGIC VARIABLES === local PerceivedPos = nil local PerceivedVel = Vector3.new() local LastUpdateTimeX = 0 local LastUpdateTimeY = 0 local ReactionDelayX = 0.5 local ReactionDelayY = 0.5 local TargetReactionDelay = 0.5 local JustLocked = true local CurrentLockedTarget = nil local TargetSwitchTimer = 0 local PendingTarget = nil -- Global Target Variable (Used for Aimbot & Hitsound) local Target = nil -- Dead Delay Variable local DeathDelayStart = 0 -- Switch Part Variables local LastPartSwitchTime = 0 local CurrentSwitchPart = nil -- [[ CUSTOM WINDOW & FOOTER UPDATER ]] -- local Window = Library:CreateWindow({ Title = "v1", Footer = "Loading Data...", NotifySide = "Right", ShowCustomCursor = false, }) task.spawn(function() local Stats = game:GetService("Stats") local StartTime = tick() local LabelInstance = nil -- Wait a second for UI to appear task.wait(1) -- AUTO-FINDER: Find the TextLabel in the Library local Container = Library.MainFrame or game:GetService("CoreGui") for _, obj in pairs(Container:GetDescendants()) do if obj:IsA("TextLabel") and obj.Text == "Loading Data..." then LabelInstance = obj LabelInstance.RichText = true -- Enable colors/emojis break end end while true do -- 1. Uptime Calc local Elapsed = tick() - StartTime local h = math.floor(Elapsed / 3600) local m = math.floor(Elapsed / 60) % 60 local s = math.floor(Elapsed % 60) -- 2. Ping Value local pingVal = 0 pcall(function() pingVal = Stats.Network.ServerStatsItem["Data Ping"]:GetValue() end) -- 3. Ping Color Logic (Green -> Yellow -> Red) local r, g, b = 90, 255, 90 -- Green (Good) if pingVal > 180 then r, g, b = 255, 65, 65 -- Deep Red elseif pingVal > 110 then r, g, b = 255, 140, 30 -- Orange elseif pingVal > 70 then r, g, b = 255, 230, 80 -- Yellow end -- 4. Component Formatting -- PING: NUMBERms local pingString = string.format('%.2fms', r, g, b, pingVal) -- VERSION: Blue Color for 1.07 local verString = 'e1.07' -- DATE: Adds Calendar Emoji local dateString = os.date("%B %d, %Y") .. " 📅" -- TIME & UPTIME local timeString = os.date("%I:%M %p") local uptimeString = string.format("[%02d:%02d:%02d]", h, m, s) -- 5. Construct Final String local finalString = string.format("⚙ Core Version: %s | %s | %s | %s %s", verString, pingString, dateString, timeString, uptimeString) -- 6. Apply to UI if LabelInstance and LabelInstance.Parent then LabelInstance.RichText = true LabelInstance.Text = finalString elseif Window.FooterLabel then Window.FooterLabel.RichText = true Window.FooterLabel.Text = finalString end task.wait(0.5) end end) -- [[ END FOOTER UPDATER ]] -- local Tabs = { Combat = Window:AddTab("Combat", "crosshair"), Whitelist = Window:AddTab("Whitelist", "shield"), Misc = Window:AddTab("Miscellaneous", "cog"), User = Window:AddTab("User", "user"), ["UI Settings"] = Window:AddTab("UI Settings", "settings"), Hitsound = Window:AddTab("", "sound"), } -- Aimbot Group local AimbotGroup = Tabs.Combat:AddLeftGroupbox("Aim") AimbotGroup:AddToggle("AimbotEnabled", { Text = "Aimbot", Default = false, Callback = function(value) if FOVCircle then FOVCircle.Visible = value and Toggles.FovVisible.Value end end, }) -- THIS IS THE MAIN TEAM CHECK USED EVERYWHERE AimbotGroup:AddToggle("TeamCheck", { Text = "Team Check", Default = true }) -- THIS IS THE MAIN WALL CHECK USED BY SILENT AIM TOO AimbotGroup:AddToggle("WallCheck", { Text = "Wall Check", Default = true }) AimbotGroup:AddToggle("HealthCheck", { Text = "Health Check", Default = true }) AimbotGroup:AddToggle("ForceFieldCheck", { Text = "ForceField Check", Default = true }) AimbotGroup:AddSlider("MinHealth", { Text = "Min Health to Aim", Default = 0, Min = 0, Max = 100, Rounding = 0, }) AimbotGroup:AddLabel("Aimbot Key"):AddKeyPicker("AimbotKeybind", { Default = "Q", Mode = "Hold", Text = "Press to aim (hold)", DefaultModifiers = {}, }) AimbotGroup:AddDivider() AimbotGroup:AddDropdown("WallCheckMethod", { Values = { "Center", "MultiRay" }, Default = 1, Text = "Wall Check Method", }) AimbotGroup:AddDropdown("AimMethod", { Values = { "Mouse", "Camera" }, Default = 1, Text = "Aim Method", }) AimbotGroup:AddSlider("Prediction", { Text = "Prediction", Default = 0.18, Min = 0, Max = 0.5, Rounding = 3, }) -- NEW DEAD SWITCH DELAY AimbotGroup:AddSlider("DeadDelay", { Text = "Dead Switch Delay", Default = 0.2, Min = 0, Max = 1, Rounding = 2, Tooltip = "Time to wait after target dies before aiming at a new one." }) AimbotGroup:AddSlider("ReactionTimeX", { Text = "X ms (Drift Time)", Default = 500, Min = 0, Max = 1000, Rounding = 0, Callback = function(val) ReactionDelayX = val / 1000 TargetReactionDelay = (ReactionDelayX + ReactionDelayY) / 2 end }) AimbotGroup:AddSlider("ReactionTimeY", { Text = "Y ms (Drift Time)", Default = 500, Min = 0, Max = 1000, Rounding = 0, Callback = function(val) ReactionDelayY = val / 1000 TargetReactionDelay = (ReactionDelayX + ReactionDelayY) / 2 end }) AimbotGroup:AddSlider("SnapBackSpeed", { Text = "Snap Back Speed", Default = 5, Min = 1, Max = 20, Rounding = 1, Tooltip = "Used when catching up from far away. 1=Instant, 20=Smooth." }) AimbotGroup:AddSlider("XSmoothness", { Text = "X Smoothness", Default = 5, Min = 1, Max = 20, }) AimbotGroup:AddSlider("YSmoothness", { Text = "Y Smoothness", Default = 5, Min = 1, Max = 20, }) AimbotGroup:AddSlider("MaxDistance", { Text = "Aim Distance", Default = 500, Min = 50, Max = 2000, }) AimbotGroup:AddDivider() AimbotGroup:AddDropdown("AimPart", { Values = { "Head", "UpperTorso", "HumanoidRootPart" }, Default = 1, Text = "AimPart", }) AimbotGroup:AddLabel("Fov Color"):AddColorPicker("FovColor", { Default = Color3.new(1,1,1), }) AimbotGroup:AddDivider() AimbotGroup:AddSlider("FOVRadius", { Text = "FOV Size", Default = 200, Min = 10, Max = 500, }) AimbotGroup:AddToggle("FovVisible", { Text = "Show FOV Circle", Default = true, Callback = function(val) if FOVCircle then FOVCircle.Visible = Toggles.AimbotEnabled.Value and val end end, }) AimbotGroup:AddToggle("RainbowFov", { Text = "Rainbow FOV", Default = false, }) -- Prediction Foreshadow Settings AimbotGroup:AddDivider() AimbotGroup:AddToggle("PredictionForeshadow", { Text = "Prediction Foreshadow", Default = false, }) AimbotGroup:AddLabel("Ghost Color"):AddColorPicker("GhostColor", { Default = Color3.fromRGB(120, 120, 120), }) AimbotGroup:AddSlider("GhostTransparency", { Text = "Ghost Transparency", Default = 0.5, Min = 0, Max = 1, Rounding = 2, }) local WhitelistGroup = Tabs.Whitelist:AddLeftGroupbox("Whitelists") WhitelistGroup:AddDropdown("PlayerWhitelist", { SpecialType = "Player", ExcludeLocalPlayer = true, Multi = true, Text = "Player Whitelist", Tooltip = "Whitelisted players cannot be aimed at", }) WhitelistGroup:AddDropdown("TeamWhitelist", { SpecialType = "Team", Multi = true, Text = "Team Whitelist", Tooltip = "Whitelisted teams cannot be aimed at", }) WhitelistGroup:AddDivider() WhitelistGroup:AddLabel("ESP Whitelists") WhitelistGroup:AddDropdown("ESPPlayerWhitelist", { SpecialType = "Player", ExcludeLocalPlayer = true, Multi = true, Text = "ESP Player Whitelist", Tooltip = "Whitelisted players will not show on ESP", }) WhitelistGroup:AddDropdown("ESPTeamWhitelist", { SpecialType = "Team", Multi = true, Text = "ESP Team Whitelist", Tooltip = "Whitelisted teams will not show on ESP", }) -- Misc Group local MiscGroup = Tabs.Misc:AddLeftGroupbox("Miscellaneous") MiscGroup:AddToggle("AimNPCs", { Text = "Aim NPCs", Default = false }) MiscGroup:AddToggle("InfDistance", { Text = "Infinite Distance", Default = false }) MiscGroup:AddToggle("AimVisibleParts", { Text = "Aim Visible Parts", Default = false, Tooltip = "Automatically aims at any visible limb if main part is hidden." }) MiscGroup:AddToggle("OutwallAim", { Text = "Outwall Aim", Default = false }) -- Full Bright Implementation local Lighting = game:GetService("Lighting") local OriginalLighting = { Brightness = Lighting.Brightness, ClockTime = Lighting.ClockTime, FogEnd = Lighting.FogEnd, Ambient = Lighting.Ambient } MiscGroup:AddToggle("FullBright", { Text = "Full Bright", Default = false, Callback = function(Value) if Value then Lighting.Brightness = 2 Lighting.ClockTime = 14 Lighting.FogEnd = 100000 Lighting.Ambient = Color3.new(1,1,1) else Lighting.Brightness = OriginalLighting.Brightness Lighting.ClockTime = OriginalLighting.ClockTime Lighting.FogEnd = OriginalLighting.FogEnd Lighting.Ambient = OriginalLighting.Ambient end end }) -- Visuals Group local VisualsGroup = Tabs.Combat:AddRightGroupbox("Visuals") VisualsGroup:AddToggle("ESPEnabled", { Text = "Enable ESP", Default = false, Callback = function(value) ESP.Enabled = value end, }) VisualsGroup:AddToggle("ESPBox", { Text = "Box", Default = true, Callback = function(value) ESP.Drawing.Boxes.Full.Enabled = value ESP.Drawing.Boxes.Corner.Enabled = value end }) VisualsGroup:AddLabel("Box Color"):AddColorPicker("ESPBoxColor", { Default = Color3.new(1,1,1), Callback = function(value) ESP.Drawing.Boxes.GradientRGB1 = value ESP.Drawing.Boxes.GradientFillRGB1 = value end }) VisualsGroup:AddToggle("ESPBoxFilled", { Text = "Fill Box", Default = false, Callback = function(value) ESP.Drawing.Boxes.Filled.Enabled = value end }) VisualsGroup:AddLabel("Filled Box Color"):AddColorPicker("ESPBoxFillColor", { Default = Color3.new(1,0,0), Callback = function(value) ESP.Drawing.Boxes.Filled.RGB = value end }) VisualsGroup:AddSlider("ESPBoxFillTransparency", { Text = "Fill Box Transparency", Default = 0.5, Min = 0, Max = 1, Rounding = 2, Callback = function(value) ESP.Drawing.Boxes.Filled.Transparency = value * 100 end, }) VisualsGroup:AddToggle("ESPName", { Text = "Name", Default = true, Callback = function(value) ESP.Drawing.Names.Enabled = value end }) VisualsGroup:AddToggle("ESPDistance", { Text = "Distance", Default = true, Callback = function(value) ESP.Drawing.Distances.Enabled = value end }) VisualsGroup:AddToggle("ESPHealth", { Text = "Health Bar", Default = true, Callback = function(value) ESP.Drawing.Healthbar.Enabled = value end }) VisualsGroup:AddToggle("ESPTool", { Text = "Tool", Default = true, Callback = function(value) ESP.Drawing.Weapons.Enabled = value end }) VisualsGroup:AddToggle("ESPHideTeam", { Text = "Hide Teammates", Default = true, Callback = function(value) ESP.TeamCheck = value end }) VisualsGroup:AddSlider("ESPMaxDistance", { Text = "Max Distance", Default = 200, Min = 100, Max = 5000, Rounding = 0, Callback = function(val) ESP.MaxDistance = val end }) VisualsGroup:AddDivider() VisualsGroup:AddLabel("ESP Color"):AddColorPicker("ESPColor", { Default = Color3.new(1,1,1), Callback = function(value) ESP.Drawing.Weapons.WeaponTextRGB = value ESP.Drawing.Healthbar.HealthTextRGB = value ESP.Drawing.Names.RGB = value ESP.Drawing.Distances.RGB = value -- Add more if needed end }) VisualsGroup:AddToggle("RainbowESP", { Text = "Rainbow ESP", Default = false }) VisualsGroup:AddToggle("ChamsEnabled", { Text = "Chams", Default = false, Callback = function(value) ESP.Drawing.Chams.Enabled = value end, }) VisualsGroup:AddLabel("Chams Color"):AddColorPicker("ChamsColor", { Default = Color3.new(1,1,1), Callback = function(value) ESP.Drawing.Chams.FillRGB = value ESP.Drawing.Chams.OutlineRGB = value end }) VisualsGroup:AddSlider("ESPFontSize", { Text = "Text Size", Default = 1, Min = 1, Max = 3, Rounding = 0, Callback = function(val) ESP.FontSize = 11 + (val - 1) * 22 end }) -- Hitsound Group local HitsoundGroup = Tabs.Hitsound:AddLeftGroupbox("Hitsound.") HitsoundGroup:AddToggle("HitsoundEnabled", { Text = "Enable Hitsound", Default = false, }) HitsoundGroup:AddDropdown("HitsoundType", { Values = { "neverlose.cc", "fatality.win", "bameware.club", "skeet.cc", "rifk7.com", "primordial.dev" }, Default = 1, Text = "Hitsound", }) HitsoundGroup:AddSlider("HitsoundVolume", { Text = "Volume", Default = 3, Min = 0, Max = 10, Rounding = 1, Callback = function(val) if HitSound then HitSound.Volume = val end end, }) -- Create the sound instance -- REPLACED INVALID ID WITH A WORKING ONE (Rust Hitsound) local HitSound = Instance.new("Sound") HitSound.Parent = game:GetService("SoundService") HitSound.SoundId = "rbxassetid://97643101798871" HitSound.Volume = 3 -- Increased volume -- Preload all possible hitsounds to eliminate loading delay local ContentProvider = game:GetService("ContentProvider") local soundIds = { "rbxassetid://97643101798871", "rbxassetid://106586644436584", "rbxassetid://92614567965693", "rbxassetid://4817809188", "rbxassetid://76064874887167", "rbxassetid://85340682645435" } ContentProvider:PreloadAsync(soundIds) -- Options for changing HITSOUND ( by gemini 3 pro, grok 4.1 thinking) Options.HitsoundType:OnChanged(function(value) if value == "neverlose.cc" then HitSound.SoundId = "rbxassetid://97643101798871" elseif value == "fatality.win" then HitSound.SoundId = "rbxassetid://106586644436584" elseif value == "bameware.club" then HitSound.SoundId = "rbxassetid://92614567965693" elseif value == "skeet.cc" then HitSound.SoundId = "rbxassetid://4817809188" elseif value == "rifk7.com" then HitSound.SoundId = "rbxassetid://76064874887167" elseif value == "primordial.dev" then HitSound.SoundId = "rbxassetid://85340682645435" end end) -- ========================================== -- REAL HITSOUND DETECTION LOGIC (FIXED) -- ========================================== local Players = game:GetService("Players") local LocalPlayer = Players.LocalPlayer local mouse = LocalPlayer:GetMouse() -- Ensure mouse is accessible local Debris = game:GetService("Debris") local function HookHitsound(char) local hum = char:WaitForChild("Humanoid", 10) if not hum then return end local lastHealth = hum.Health hum.HealthChanged:Connect(function(newHealth) if newHealth < lastHealth then -- Damage detected if Toggles.HitsoundEnabled.Value then -- CHECK 1: Is this the current aimbot/triggerbot target? local isTarget = (Target and char == Target) -- CHECK 2: If no locked target, is the mouse directly over this enemy? (Manual Aim) if not isTarget then local mouseT = mouse.Target if mouseT and mouseT:IsDescendantOf(char) then isTarget = true end end if isTarget then local s = HitSound:Clone() s.Parent = HitSound.Parent s:Play() s.Ended:Connect(function() s:Destroy() end) end end end lastHealth = newHealth end) end -- Hook existing players for _, plr in ipairs(Players:GetPlayers()) do if plr ~= LocalPlayer then if plr.Character then HookHitsound(plr.Character) end plr.CharacterAdded:Connect(HookHitsound) end end -- Hook new players Players.PlayerAdded:Connect(function(plr) if plr ~= LocalPlayer then plr.CharacterAdded:Connect(HookHitsound) end end) -- ========================================== -- Legit / Blantant Tabs inside Combat local TabBox = Tabs.Combat:AddRightTabbox("Legit / Blantant") -- Legit Tab local LegitTab = TabBox:AddTab("Legit") LegitTab:AddToggle("StickyAim", { Text = "Sticky Aim", Default = false }) LegitTab:AddToggle("StickyWallCheck", { Text = "Sticky Wall Check", Default = false }) LegitTab:AddToggle("SwitchPart", { Text = "Switch Part", Default = false, Tooltip = "Randomly switches aim target to look legit." }) LegitTab:AddSlider("SwitchPartDelay", { Text = "Switch Part Delay (s)", Default = 2, Min = 0.1, Max = 10, Rounding = 1, Tooltip = "How long to aim at one part before switching." }) LegitTab:AddToggle("TriggerDistanceCheck", { Text = "Trigger Distance Check", Default = false }) LegitTab:AddSlider("TriggerMaxDistance", { Text = "Trigger Max Distance", Default = 500, Min = 50, Max = 2000, }) LegitTab:AddToggle("TriggerbotEnabled", { Text = "Triggerbot", Default = false }) LegitTab:AddToggle("TriggerbotWallCheck", { Text = "Triggerbot Wall Check", Default = false }) LegitTab:AddLabel("Triggerbot Key"):AddKeyPicker("TriggerbotKeybind", { Default = "E", Mode = "Hold", Text = "Press to trigger (hold)", DefaultModifiers = {}, }) -- Blantant Tab local BlantantTab = TabBox:AddTab("Blantant") BlantantTab:AddToggle("SilentAim", { Text = "Silent Aim", Default = false, Callback = function(val) SilentAimSettings.Enabled = val end }) BlantantTab:AddDropdown("SilentMethod", { Values = { "Raycast", "FindPartOnRay", "FindPartOnRayWithIgnoreList", "FindPartOnRayWithWhitelist", "ViewportPointToRay", "ScreenPointToRay", "CounterBlox" }, Default = 1, Text = "Silent Aim Method", Callback = function(val) SilentAimSettings.SilentAimMethod = val end }) BlantantTab:AddDropdown("SilentTargetPart", { Values = { "Head", "HumanoidRootPart", "Random" }, Default = 1, Text = "Target Part", Callback = function(val) SilentAimSettings.TargetPart = val end }) BlantantTab:AddSlider("SilentHitChance", { Text = "Hit Chance", Default = 100, Min = 0, Max = 100, Rounding = 0, Callback = function(val) SilentAimSettings.HitChance = val end }) -- REMOVED: Redundant Visible Check Toggle (Will use main WallCheck instead) -- REMOVED: Redundant Team Check Toggle (Uses main TeamCheck) BlantantTab:AddToggle("SilentAliveCheck", { Text = "Alive Check", Default = true, Callback = function(val) SilentAimSettings.AliveCheck = val end }) BlantantTab:AddToggle("BulletTP", { Text = "Bullet Teleport", Default = false, Callback = function(val) SilentAimSettings.BulletTP = val end }) BlantantTab:AddLabel("Team check and Wall check is on The Aim section.") -- Services local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Camera = workspace.CurrentCamera local LocalCharacter = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() local LocalHumanoidRootPart = LocalCharacter:WaitForChild("HumanoidRootPart") -- User Tab local UserGroup = Tabs.User:AddLeftGroupbox("User Information") UserGroup:AddLabel("Player executor: " .. (identifyexecutor() or "Unknown")) UserGroup:AddLabel("Username: " .. LocalPlayer.Name) UserGroup:AddLabel("Profile Name: " .. LocalPlayer.DisplayName) local creationTime = os.time() - (LocalPlayer.AccountAge * 86400) local creationDate = os.date("%Y-%m-%d", creationTime) UserGroup:AddLabel("Account created: " .. creationDate) LocalPlayer.CharacterAdded:Connect(function(char) LocalCharacter = char LocalHumanoidRootPart = char:WaitForChild("HumanoidRootPart") end) -- Initialize mouse behavior UserInputService.MouseBehavior = Enum.MouseBehavior.Default UserInputService.MouseIconEnabled = true -- Mouse Lock Fixes (Updated) local function updateMouseLock() local character = LocalPlayer.Character if not character then return end local head = character:FindFirstChild("Head") local humanoid = character:FindFirstChildOfClass("Humanoid") if not head or not humanoid then return end local isFirstPerson = (Camera.CFrame.Position - head.Position).Magnitude < 1 local isRagdolled = humanoid:GetState() == Enum.HumanoidStateType.Physics local isShiftLock = not isRagdolled and humanoid.AutoRotate == false local rightClickPressed = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2) if isRagdolled then UserInputService.MouseBehavior = Enum.MouseBehavior.Default UserInputService.MouseIconEnabled = true elseif isFirstPerson then UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter UserInputService.MouseIconEnabled = true elseif isShiftLock then UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter UserInputService.MouseIconEnabled = true else if not rightClickPressed then UserInputService.MouseBehavior = Enum.MouseBehavior.Default UserInputService.MouseIconEnabled = true end end end -- Helper: extremely robust check for dropdown/multi selection values local function selectionContains(selection, value) if selection == nil then return false end if selection == value then return true end local targetName = nil local targetUserId = nil local targetTeamName = nil local targetIsPlayer = false local targetIsTeam = false if typeof(value) == "Instance" then if value:IsA("Player") then targetIsPlayer = true targetName = value.Name targetUserId = value.UserId elseif value:IsA("Team") then targetIsTeam = true targetTeamName = value.Name else targetName = value.Name end else targetName = tostring(value) local n = tonumber(value) if n then targetUserId = n end end local tsel = typeof(selection) if tsel == "string" or tsel == "number" then if tostring(selection) == tostring(value) then return true end end if typeof(selection) == "Instance" then if selection:IsA("Player") and targetIsPlayer then if selection.UserId == targetUserId or selection.Name == targetName then return true end end if selection:IsA("Team") and targetIsTeam then if selection.Name == targetTeamName then return true end end end local hasNumericKey = false if type(selection) == "table" then for k,_ in pairs(selection) do if type(k) == "number" then hasNumericKey = true break end end end if hasNumericKey then for _, entry in ipairs(selection) do if typeof(entry) == "Instance" then if entry:IsA("Player") and targetIsPlayer then if entry.UserId == targetUserId or entry.Name == targetName then return true end elseif entry:IsA("Team") and targetIsTeam then if entry.Name == targetTeamName then return true end else if tostring(entry) == tostring(value) then return true end end elseif type(entry) == "table" then for k,v in pairs(entry) do if type(k) == "string" and k == targetName then return true end if tostring(v) == targetName then return true end local num = tonumber(v) if num and targetUserId and num == targetUserId then return true end end else if tostring(entry) == targetName then return true end local n = tonumber(entry) if n and targetUserId and n == targetUserId then return true end end end return false end if type(selection) == "table" then for k,v in pairs(selection) do if typeof(k) == "Instance" and k:IsA("Player") then if targetIsPlayer and (k.UserId == targetUserId or k.Name == targetName) then return true end end if typeof(k) == "Instance" and k:IsA("Team") then if targetIsTeam and k.Name == targetTeamName then return true end end if type(k) == "string" then if targetIsPlayer and k == targetName then return true end if targetIsTeam and k == targetTeamName then return true end end if typeof(v) == "Instance" then if v:IsA("Player") and targetIsPlayer then if v.UserId == targetUserId or v.Name == targetName then return true end elseif v:IsA("Team") and targetIsTeam then if v.Name == targetTeamName then return true end end else if tostring(v) == targetName then return true end local num = tonumber(v) if num and targetUserId and num == targetUserId then return true end end end end return false end -- ============================================ -- HELPER: GET AIM PART (HANDLES R6/R15 NPC/PLAYER) -- ============================================ local function getAimPart(character, forcedPartName) if not character then return nil end local partName = forcedPartName or Options.AimPart.Value local part = character:FindFirstChild(partName) -- Fallback for R6 NPCs/Players who don't have UpperTorso if not part then if partName == "UpperTorso" then part = character:FindFirstChild("Torso") elseif partName == "LowerTorso" then part = character:FindFirstChild("Torso") end end return part end -- ============================================ -- NEW SILENT AIM IMPLEMENTATION -- ============================================ -- ============================================ -- SILENT AIM VARIABLES & FUNCTIONS -- ============================================ local ScriptState = { ClosestHitPart = nil } local SilentAimSettings = { Enabled = false, TeamCheck = false, VisibleCheck = false, AliveCheck = true, TargetPart = "HumanoidRootPart", SilentAimMethod = "Raycast", FOVRadius = 130, HitChance = 100, MultiplyUnitBy = 1000, BulletTP = false, } local ExpectedArguments = { ViewportPointToRay = { ArgCountRequired = 2, Args = { "number", "number" } }, ScreenPointToRay = { ArgCountRequired = 2, Args = { "number", "number" } }, Raycast = { ArgCountRequired = 3, Args = { "Instance", "Vector3", "Vector3", "RaycastParams" } }, FindPartOnRay = { ArgCountRequired = 2, Args = { "Ray", "Instance?", "boolean?", "boolean?" } }, FindPartOnRayWithIgnoreList = { ArgCountRequired = 2, Args = { "Ray", "table", "boolean?", "boolean?" } }, FindPartOnRayWithWhitelist = { ArgCountRequired = 2, Args = { "Ray", "table", "boolean?" } } } local function CalculateChance(Percentage) Percentage = math.floor(Percentage) local chance = math.floor(Random.new().NextNumber(Random.new(), 0, 1) * 100) / 100 return chance <= Percentage / 100 end local function getDirection(Origin, Position) return (Position - Origin).Unit end local function ValidateArguments(Args, RayMethod) local Matches = 0 if #Args < RayMethod.ArgCountRequired then return false end for Pos, Argument in next, Args do local Expected = RayMethod.Args[Pos] if not Expected then break end local IsOptional = Expected:sub(-1) == "?" local BaseType = IsOptional and Expected:sub(1, -2) or Expected if typeof(Argument) == BaseType then Matches = Matches + 1 elseif IsOptional and Argument == nil then Matches = Matches + 1 end end return Matches >= RayMethod.ArgCountRequired end -- Uses Silent Aim specific checks (not the general IsVisible function) local function IsPlayerVisibleSilent(Player) local PlayerCharacter = Player and Player.Character local LocalPlayerCharacter = LocalPlayer.Character if not (PlayerCharacter and LocalPlayerCharacter) then return false end local targetPartName = (SilentAimSettings.TargetPart == "Random") and "HumanoidRootPart" or SilentAimSettings.TargetPart local PlayerRoot = PlayerCharacter:FindFirstChild(targetPartName) or PlayerCharacter:FindFirstChild("HumanoidRootPart") if not PlayerRoot then return false end local CastPoints = { PlayerRoot.Position, LocalPlayerCharacter, PlayerCharacter } local IgnoreList = { LocalPlayerCharacter, PlayerCharacter } local ObscuringObjects = #Camera:GetPartsObscuringTarget(CastPoints, IgnoreList) return ObscuringObjects == 0 end local function getClosestPlayerSilent() -- FIX: Using the global robust 'selectionContains' instead of redefining a weak one here local radiusOption = Options.FOVRadius.Value if Toggles.InfDistance.Value then radiusOption = math.huge end -- UPDATED: Use Main WallCheck (Visible Check) local visibleCheck = (Toggles.WallCheck and Toggles.WallCheck.Value) -- UPDATED: Use the Main Team Check Toggle local teamCheck = (Toggles.TeamCheck and Toggles.TeamCheck.Value) local aliveCheck = (Toggles.SilentAliveCheck and Toggles.SilentAliveCheck.Value) local targetPartOption = (Options.SilentTargetPart and Options.SilentTargetPart.Value) or "HumanoidRootPart" local ClosestPart = nil local DistanceToMouse = radiusOption local MousePos = UserInputService:GetMouseLocation() for _, Player in ipairs(Players:GetPlayers()) do if Player == LocalPlayer then continue end if teamCheck and LocalPlayer.Team and Player.Team == LocalPlayer.Team then continue end local Character = Player.Character if not Character then continue end -- Use Obsidian Whitelists (Updated to use global helper and objects) local playerWL = (Options.PlayerWhitelist and Options.PlayerWhitelist.Value) or {} local teamWL = (Options.TeamWhitelist and Options.TeamWhitelist.Value) or {} -- Fix: Check if player object or team object is whitelisted (better than Name string match) if selectionContains(playerWL, Player) then continue end if Player.Team and selectionContains(teamWL, Player.Team) then continue end local Humanoid = Character:FindFirstChild("Humanoid") local HRP = Character:FindFirstChild("HumanoidRootPart") if not HRP or not Humanoid then continue end if aliveCheck and Humanoid.Health <= 0 then continue end if Toggles.ForceFieldCheck.Value and Character:FindFirstChildOfClass("ForceField") then continue end if visibleCheck and not IsPlayerVisibleSilent(Player) then continue end local ScreenPosition, OnScreen = Camera:WorldToScreenPoint(HRP.Position) if not Toggles.InfDistance.Value and not OnScreen then continue end local Distance = (Vector2.new(MousePos.X, MousePos.Y) - Vector2.new(ScreenPosition.X, ScreenPosition.Y)).Magnitude if Distance <= DistanceToMouse then local chosenPart = targetPartOption if targetPartOption == "Random" then local parts = {"Head", "HumanoidRootPart", "UpperTorso"} chosenPart = parts[math.random(1, #parts)] end local candidatePart = Character:FindFirstChild(chosenPart) if candidatePart then ClosestPart = candidatePart DistanceToMouse = Distance end end end return ClosestPart end -- Update Loop RunService.RenderStepped:Connect(function() -- Fix: Added AND condition for Toggles.AimbotEnabled.Value if Toggles.SilentAim and Toggles.SilentAim.Value and Toggles.AimbotEnabled.Value then ScriptState.ClosestHitPart = getClosestPlayerSilent() else ScriptState.ClosestHitPart = nil end end) -- HOOK local oldNamecall oldNamecall = hookmetamethod(game, "__namecall", newcclosure(function(...) local Method = getnamecallmethod() local Arguments = {...} local self = Arguments[1] -- Fix: Added AND condition for Toggles.AimbotEnabled.Value local enabled = Toggles.SilentAim and Toggles.SilentAim.Value and Toggles.AimbotEnabled.Value local chance = CalculateChance((Options.SilentHitChance and Options.SilentHitChance.Value) or 100) if not checkcaller() and enabled and self == workspace and chance then local HitPart = ScriptState.ClosestHitPart if HitPart then local function computeRay(origin) local adjustedOrigin = origin if Toggles.BulletTP and Toggles.BulletTP.Value then adjustedOrigin = (HitPart.CFrame * CFrame.new(0, 0, 1)).p end local multiplier = SilentAimSettings.MultiplyUnitBy or 1000 local direction = getDirection(adjustedOrigin, HitPart.Position) * multiplier return adjustedOrigin, direction end local currentMethod = (Options.SilentMethod and Options.SilentMethod.Value) or "Raycast" if Method == "Raycast" and currentMethod == "Raycast" then if ValidateArguments(Arguments, ExpectedArguments.Raycast) then local Origin, Direction = computeRay(Arguments[2]) Arguments[2] = Origin Arguments[3] = Direction return oldNamecall(unpack(Arguments)) end elseif (Method == "FindPartOnRay" or Method == "findPartOnRay") and currentMethod == "FindPartOnRay" then if ValidateArguments(Arguments, ExpectedArguments.FindPartOnRay) then local Origin, Direction = computeRay(Arguments[2].Origin) Arguments[2] = Ray.new(Origin, Direction) return oldNamecall(unpack(Arguments)) end elseif Method == "FindPartOnRayWithIgnoreList" and currentMethod == "FindPartOnRayWithIgnoreList" then if ValidateArguments(Arguments, ExpectedArguments.FindPartOnRayWithIgnoreList) then local Origin, Direction = computeRay(Arguments[2].Origin) Arguments[2] = Ray.new(Origin, Direction) return oldNamecall(unpack(Arguments)) end elseif Method == "FindPartOnRayWithWhitelist" and currentMethod == "FindPartOnRayWithWhitelist" then if ValidateArguments(Arguments, ExpectedArguments.FindPartOnRayWithWhitelist) then local Origin, Direction = computeRay(Arguments[2].Origin) Arguments[2] = Ray.new(Origin, Direction) return oldNamecall(unpack(Arguments)) end elseif Method == "FindPartOnRayWithIgnoreList" and currentMethod == "CounterBlox" then local Origin, Direction = computeRay(Arguments[2].Origin) Arguments[2] = Ray.new(Origin, Direction) return oldNamecall(unpack(Arguments)) end end end return oldNamecall(...) end)) -- ============================================ -- END SILENT AIM -- ============================================ local function isVisible(part) if not Toggles.WallCheck.Value or not part then return true end local origin = Camera.CFrame.Position local method = Options.WallCheckMethod.Value local params = RaycastParams.new() params.FilterType = Enum.RaycastFilterType.Blacklist params.FilterDescendantsInstances = {LocalPlayer.Character} if method == "Center" then local direction = (part.Position - origin) local result = workspace:Raycast(origin, direction, params) if not result then return true end return result.Instance:IsDescendantOf(part.Parent) elseif method == "MultiRay" then -- Cast to center local direction = (part.Position - origin) local result = workspace:Raycast(origin, direction, params) if not result or result.Instance:IsDescendantOf(part.Parent) then return true end -- If center blocked, check 4 offsets local offsetAmount = part.Size.Magnitude / 4 -- small offset local offsets = { Vector3.new(offsetAmount, 0, 0), Vector3.new(-offsetAmount, 0, 0), Vector3.new(0, offsetAmount, 0), Vector3.new(0, -offsetAmount, 0), } for _, offset in offsets do local targetPos = part.Position + part.CFrame:VectorToWorldSpace(offset) direction = (targetPos - origin) result = workspace:Raycast(origin, direction, params) if not result or result.Instance:IsDescendantOf(part.Parent) then return true end end return false end end -- FOV Circle - THINNER local FOVCircle pcall(function() FOVCircle = Drawing.new("Circle") FOVCircle.Thickness = 1 -- Thinner FOV circle FOVCircle.Filled = false FOVCircle.Transparency = 1 FOVCircle.Color = Color3.new(1,1,1) FOVCircle.Visible = false end) local hue = 0 --[[ WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk! ]] local Workspace, RunService, Players, CoreGui, Lighting = cloneref(game:GetService("Workspace")), cloneref(game:GetService("RunService")), cloneref(game:GetService("Players")), game:GetService("CoreGui"), cloneref(game:GetService("Lighting")) local ESP = { Enabled = Toggles.ESPEnabled.Value, TeamCheck = Toggles.ESPHideTeam.Value, MaxDistance = Options.ESPMaxDistance.Value, FontSize = 11 + (Options.ESPFontSize.Value - 1) * 22, FadeOut = { OnDistance = true, OnDeath = false, OnLeave = false, }, Options = { Teamcheck = false, TeamcheckRGB = Color3.fromRGB(0, 255, 0), Friendcheck = true, FriendcheckRGB = Color3.fromRGB(0, 255, 0), Highlight = false, HighlightRGB = Color3.fromRGB(255, 0, 0), }, Drawing = { Chams = { Enabled = Toggles.ChamsEnabled.Value, Thermal = true, FillRGB = Options.ChamsColor.Value, Fill_Transparency = 50, OutlineRGB = Options.ChamsColor.Value, Outline_Transparency = 0, VisibleCheck = true, }, Names = { Enabled = Toggles.ESPName.Value, RGB = Options.ESPColor.Value, }, Flags = { Enabled = true, }, Distances = { Enabled = Toggles.ESPDistance.Value, Position = "Bottom", RGB = Options.ESPColor.Value, }, Weapons = { Enabled = Toggles.ESPTool.Value, WeaponTextRGB = Options.ESPColor.Value, Outlined = false, Gradient = false, GradientRGB1 = Color3.fromRGB(255, 255, 255), GradientRGB2 = Color3.fromRGB(119, 120, 255), }, Healthbar = { Enabled = Toggles.ESPHealth.Value, HealthText = true, Lerp = false, HealthTextRGB = Options.ESPColor.Value, Width = 2.5, Gradient = true, GradientRGB1 = Color3.fromRGB(200, 0, 0), GradientRGB2 = Color3.fromRGB(60, 60, 125), GradientRGB3 = Color3.fromRGB(119, 120, 255), }, Boxes = { Animate = true, RotationSpeed = 300, Gradient = false, GradientRGB1 = Options.ESPBoxColor.Value, GradientRGB2 = Color3.fromRGB(0, 0, 0), GradientFill = true, GradientFillRGB1 = Options.ESPBoxColor.Value, GradientFillRGB2 = Color3.fromRGB(0, 0, 0), Filled = { Enabled = Toggles.ESPBoxFilled.Value, Transparency = Options.ESPBoxFillTransparency.Value * 100, RGB = Options.ESPBoxFillColor.Value, }, Full = { Enabled = Toggles.ESPBox.Value, RGB = Color3.fromRGB(255, 255, 255), }, Corner = { Enabled = Toggles.ESPBox.Value, RGB = Color3.fromRGB(255, 255, 255), }, }; }; Connections = { RunService = RunService; }; Fonts = {}; } -- Update ESP options when toggles change Toggles.ESPEnabled:OnChanged(function(value) ESP.Enabled = value end) Toggles.ESPHideTeam:OnChanged(function(value) ESP.TeamCheck = value end) Toggles.ChamsEnabled:OnChanged(function(value) ESP.Drawing.Chams.Enabled = value end) Toggles.ESPName:OnChanged(function(value) ESP.Drawing.Names.Enabled = value end) Toggles.ESPDistance:OnChanged(function(value) ESP.Drawing.Distances.Enabled = value end) Toggles.ESPHealth:OnChanged(function(value) ESP.Drawing.Healthbar.Enabled = value end) Toggles.ESPTool:OnChanged(function(value) ESP.Drawing.Weapons.Enabled = value end) Toggles.ESPBox:OnChanged(function(value) ESP.Drawing.Boxes.Full.Enabled = value ESP.Drawing.Boxes.Corner.Enabled = value end) Toggles.ESPBoxFilled:OnChanged(function(value) ESP.Drawing.Boxes.Filled.Enabled = value end) Options.ESPBoxFillTransparency:OnChanged(function(value) ESP.Drawing.Boxes.Filled.Transparency = value * 100 end) Options.ESPBoxFillColor:OnChanged(function(value) ESP.Drawing.Boxes.Filled.RGB = value end) Options.ESPBoxColor:OnChanged(function(value) ESP.Drawing.Boxes.GradientRGB1 = value ESP.Drawing.Boxes.GradientFillRGB1 = value end) Options.ESPColor:OnChanged(function(value) ESP.Drawing.Weapons.WeaponTextRGB = value ESP.Drawing.Healthbar.HealthTextRGB = value ESP.Drawing.Names.RGB = value ESP.Drawing.Distances.RGB = value -- Add more if needed end) Options.ChamsColor:OnChanged(function(value) ESP.Drawing.Chams.FillRGB = value ESP.Drawing.Chams.OutlineRGB = value end) Options.ESPFontSize:OnChanged(function(value) ESP.FontSize = 11 + (value - 1) * 22 end) Options.ESPMaxDistance:OnChanged(function(value) ESP.MaxDistance = value end) -- Def & Vars local Euphoria = ESP.Connections; local lplayer = Players.LocalPlayer; local camera = game.Workspace.CurrentCamera; local Cam = Workspace.CurrentCamera; local RotationAngle, Tick = -45, tick(); -- Weapon Images local Weapon_Icons = { ["Wooden Bow"] = "http://www.roblox.com/asset/?id=17677465400", ["Crossbow"] = "http://www.roblox.com/asset/?id=17677473017", ["Salvaged SMG"] = "http://www.roblox.com/asset/?id=17677463033", ["Salvaged AK47"] = "http://www.roblox.com/asset/?id=17677455113", ["Salvaged AK74u"] = "http://www.roblox.com/asset/?id=17677442346", ["Salvaged M14"] = "http://www.roblox.com/asset/?id=17677444642", ["Salvaged Python"] = "http://www.roblox.com/asset/?id=17677451737", ["Military PKM"] = "http://www.roblox.com/asset/?id=17677449448", ["Military M4A1"] = "http://www.roblox.com/asset/?id=17677479536", ["Bruno's M4A1"] = "http://www.roblox.com/asset/?id=17677471185", ["Military Barrett"] = "http://www.roblox.com/asset/?id=17677482998", ["Salvaged Skorpion"] = "http://www.roblox.com/asset/?id=17677459658", ["Salvaged Pump Action"] = "http://www.roblox.com/asset/?id=17677457186", ["Military AA12"] = "http://www.roblox.com/asset/?id=17677475227", ["Salvaged Break Action"] = "http://www.roblox.com/asset/?id=17677468751", ["Salvaged Pipe Rifle"] = "http://www.roblox.com/asset/?id=17677468751", ["Salvaged P250"] = "http://www.roblox.com/asset/?id=17677447257", ["Nail Gun"] = "http://www.roblox.com/asset/?id=17677484756" }; -- Functions local Functions = {} do function Functions:Create(Class, Properties) local _Instance = typeof(Class) == 'string' and Instance.new(Class) or Class for Property, Value in pairs(Properties) do _Instance[Property] = Value end return _Instance; end -- function Functions:FadeOutOnDist(element, distance) local transparency = math.max(0.1, 1 - (distance / ESP.MaxDistance)) if element:IsA("TextLabel") then element.TextTransparency = 1 - transparency elseif element:IsA("ImageLabel") then element.ImageTransparency = 1 - transparency elseif element:IsA("UIStroke") then element.Transparency = 1 - transparency elseif element:IsA("Frame") and (element == Healthbar or element == BehindHealthbar) then element.BackgroundTransparency = 1 - transparency elseif element:IsA("Frame") then element.BackgroundTransparency = 1 - transparency elseif element:IsA("Highlight") then element.FillTransparency = 1 - transparency element.OutlineTransparency = 1 - transparency end; end; end; do -- Initalize local ScreenGui = Functions:Create("ScreenGui", { Parent = CoreGui, Name = "ESPHolder", }); local DupeCheck = function(plr) if ScreenGui:FindFirstChild(plr.Name) then ScreenGui[plr.Name]:Destroy() end end local ESPFunc = function(plr) coroutine.wrap(DupeCheck)(plr) -- Dupecheck local Folder = Functions:Create("Folder", {Parent = ScreenGui, Name = plr.Name}) local Name = Functions:Create("TextLabel", {Parent = Folder, Position = UDim2.new(0.5, 0, 0, -11), Size = UDim2.new(0, 100, 0, 20), AnchorPoint = Vector2.new(0.5, 0.5), BackgroundTransparency = 1, TextColor3 = Color3.fromRGB(255, 255, 255), Font = Enum.Font.Code, TextSize = ESP.FontSize, TextStrokeTransparency = 0, TextStrokeColor3 = Color3.fromRGB(0, 0, 0), RichText = true}) local Distance = Functions:Create("TextLabel", {Parent = Folder, Position = UDim2.new(0.5, 0, 0, 11), Size = UDim2.new(0, 100, 0, 20), AnchorPoint = Vector2.new(0.5, 0.5), BackgroundTransparency = 1, TextColor3 = Color3.fromRGB(255, 255, 255), Font = Enum.Font.Code, TextSize = ESP.FontSize, TextStrokeTransparency = 0, TextStrokeColor3 = Color3.fromRGB(0, 0, 0), RichText = true}) local Weapon = Functions:Create("TextLabel", {Parent = Folder, Position = UDim2.new(0.5, 0, 0, 31), Size = UDim2.new(0, 100, 0, 20), AnchorPoint = Vector2.new(0.5, 0.5), BackgroundTransparency = 1, TextColor3 = Color3.fromRGB(255, 255, 255), Font = Enum.Font.Code, TextSize = ESP.FontSize, TextStrokeTransparency = 0, TextStrokeColor3 = Color3.fromRGB(0, 0, 0), RichText = true}) local Box = Functions:Create("Frame", {Parent = Folder, BackgroundColor3 = Color3.fromRGB(0, 0, 0), BackgroundTransparency = 0.75, BorderSizePixel = 0}) local Gradient1 = Functions:Create("UIGradient", {Parent = Box, Enabled = ESP.Drawing.Boxes.GradientFill, Color = ColorSequence.new{ColorSequenceKeypoint.new(0, ESP.Drawing.Boxes.GradientFillRGB1), ColorSequenceKeypoint.new(1, ESP.Drawing.Boxes.GradientFillRGB2)}}) local Outline = Functions:Create("UIStroke", {Parent = Box, Enabled = ESP.Drawing.Boxes.Gradient, Transparency = 0, Color = Color3.fromRGB(255, 255, 255), LineJoinMode = Enum.LineJoinMode.Miter}) local Gradient2 = Functions:Create("UIGradient", {Parent = Outline, Enabled = ESP.Drawing.Boxes.Gradient, Color = ColorSequence.new{ColorSequenceKeypoint.new(0, ESP.Drawing.Boxes.GradientRGB1), ColorSequenceKeypoint.new(1, ESP.Drawing.Boxes.GradientRGB2)}}) local Healthbar = Functions:Create("Frame", {Parent = Folder, BackgroundColor3 = Color3.fromRGB(255, 255, 255), BackgroundTransparency = 0}) local BehindHealthbar = Functions:Create("Frame", {Parent = Folder, ZIndex = -1, BackgroundColor3 = Color3.fromRGB(0, 0, 0), BackgroundTransparency = 0}) local HealthbarGradient = Functions:Create("UIGradient", {Parent = Healthbar, Enabled = ESP.Drawing.Healthbar.Gradient, Rotation = -90, Color = ColorSequence.new{ColorSequenceKeypoint.new(0, ESP.Drawing.Healthbar.GradientRGB1), ColorSequenceKeypoint.new(0.5, ESP.Drawing.Healthbar.GradientRGB2), ColorSequenceKeypoint.new(1, ESP.Drawing.Healthbar.GradientRGB3)}}) local HealthText = Functions:Create("TextLabel", {Parent = Folder, Position = UDim2.new(0.5, 0, 0, 31), Size = UDim2.new(0, 100, 0, 20), AnchorPoint = Vector2.new(0.5, 0.5), BackgroundTransparency = 1, TextColor3 = Color3.fromRGB(255, 255, 255), Font = Enum.Font.Code, TextSize = ESP.FontSize, TextStrokeTransparency = 0, TextStrokeColor3 = Color3.fromRGB(0, 0, 0)}) local Chams = Functions:Create("Highlight", {Parent = Folder, FillTransparency = 1, OutlineTransparency = 0, OutlineColor = Color3.fromRGB(119, 120, 255), DepthMode = "AlwaysOnTop"}) local WeaponIcon = Functions:Create("ImageLabel", {Parent = Folder, BackgroundTransparency = 1, BorderColor3 = Color3.fromRGB(0, 0, 0), BorderSizePixel = 0, Size = UDim2.new(0, 40, 0, 40)}) local Gradient3 = Functions:Create("UIGradient", {Parent = WeaponIcon, Rotation = -90, Enabled = ESP.Drawing.Weapons.Gradient, Color = ColorSequence.new{ColorSequenceKeypoint.new(0, ESP.Drawing.Weapons.GradientRGB1), ColorSequenceKeypoint.new(1, ESP.Drawing.Weapons.GradientRGB2)}}) local LeftTop = Functions:Create("Frame", {Parent = Folder, BackgroundColor3 = ESP.Drawing.Boxes.Corner.RGB, Position = UDim2.new(0, 0, 0, 0)}) local LeftSide = Functions:Create("Frame", {Parent = Folder, BackgroundColor3 = ESP.Drawing.Boxes.Corner.RGB, Position = UDim2.new(0, 0, 0, 0)}) local RightTop = Functions:Create("Frame", {Parent = Folder, BackgroundColor3 = ESP.Drawing.Boxes.Corner.RGB, Position = UDim2.new(0, 0, 0, 0)}) local RightSide = Functions:Create("Frame", {Parent = Folder, BackgroundColor3 = ESP.Drawing.Boxes.Corner.RGB, Position = UDim2.new(0, 0, 0, 0)}) local BottomSide = Functions:Create("Frame", {Parent = Folder, BackgroundColor3 = ESP.Drawing.Boxes.Corner.RGB, Position = UDim2.new(0, 0, 0, 0)}) local BottomDown = Functions:Create("Frame", {Parent = Folder, BackgroundColor3 = ESP.Drawing.Boxes.Corner.RGB, Position = UDim2.new(0, 0, 0, 0)}) local BottomRightSide = Functions:Create("Frame", {Parent = Folder, BackgroundColor3 = ESP.Drawing.Boxes.Corner.RGB, Position = UDim2.new(0, 0, 0, 0)}) local BottomRightDown = Functions:Create("Frame", {Parent = Folder, BackgroundColor3 = ESP.Drawing.Boxes.Corner.RGB, Position = UDim2.new(0, 0, 0, 0)}) local Flag1 = Functions:Create("TextLabel", {Parent = Folder, Position = UDim2.new(1, 0, 0, 0), Size = UDim2.new(0, 100, 0, 20), AnchorPoint = Vector2.new(0.5, 0.5), BackgroundTransparency = 1, TextColor3 = Color3.fromRGB(255, 255, 255), Font = Enum.Font.Code, TextSize = ESP.FontSize, TextStrokeTransparency = 0, TextStrokeColor3 = Color3.fromRGB(0, 0, 0)}) local Flag2 = Functions:Create("TextLabel", {Parent = Folder, Position = UDim2.new(1, 0, 0, 0), Size = UDim2.new(0, 100, 0, 20), AnchorPoint = Vector2.new(0.5, 0.5), BackgroundTransparency = 1, TextColor3 = Color3.fromRGB(255, 255, 255), Font = Enum.Font.Code, TextSize = ESP.FontSize, TextStrokeTransparency = 0, TextStrokeColor3 = Color3.fromRGB(0, 0, 0)}) -- local Updater = function() local Connection; local function HideESP() Box.Visible = false; Name.Visible = false; Distance.Visible = false; Weapon.Visible = false; Healthbar.Visible = false; BehindHealthbar.Visible = false; HealthText.Visible = false; WeaponIcon.Visible = false; LeftTop.Visible = false; LeftSide.Visible = false BottomSide.Visible = false; BottomDown.Visible = false; RightTop.Visible = false; RightSide.Visible = false; BottomRightSide.Visible = false; BottomRightDown.Visible = false; Flag1.Visible = false; Chams.Enabled = false; Flag2.Visible = false; -- Safety check in case cleanup happens later if not plr or not plr.Parent then if Connection then Connection:Disconnect() end Folder:Destroy() end end -- Connection = Euphoria.RunService.RenderStepped:Connect(function() -- 1. Check if player has left (Player Left Fix) if not plr or not plr.Parent then HideESP() Connection:Disconnect() return end local espPlayerWL = (Options.ESPPlayerWhitelist and Options.ESPPlayerWhitelist.Value) or {} local espTeamWL = (Options.ESPTeamWhitelist and Options.ESPTeamWhitelist.Value) or {} local player = plr if selectionContains(espPlayerWL, player) or (player.Team and selectionContains(espTeamWL, player.Team)) then HideESP() return end if not ESP.Enabled then HideESP() return end -- 2. Check Validity & Health (Dead Text Fix) if plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") and plr.Character:FindFirstChild("Humanoid") then local HRP = plr.Character.HumanoidRootPart local Humanoid = plr.Character.Humanoid -- Used FindFirstChild above -- DEAD CHECK: Hide instantly if health is <= 0 if Humanoid.Health <= 0 then HideESP() return end local Pos, OnScreen = Cam:WorldToScreenPoint(HRP.Position) local Dist = (Cam.CFrame.Position - HRP.Position).Magnitude / 3.57142857 if OnScreen and Dist <= ESP.MaxDistance then local rainbowColor = Color3.fromHSV(hue, 1, 1) local boxColor = Toggles.RainbowESP.Value and rainbowColor or Options.ESPBoxColor.Value local fillColor = Toggles.RainbowESP.Value and rainbowColor or Options.ESPBoxFillColor.Value local textColor = Toggles.RainbowESP.Value and rainbowColor or Options.ESPColor.Value local chamColor = Toggles.RainbowESP.Value and rainbowColor or Options.ChamsColor.Value local Size = HRP.Size.Y local scaleFactor = (Size * Cam.ViewportSize.Y) / (Pos.Z * 2) local w, h = 3 * scaleFactor, 4.5 * scaleFactor if ESP.FadeOut.OnDistance then Functions:FadeOutOnDist(Box, Dist) Functions:FadeOutOnDist(Outline, Dist) Functions:FadeOutOnDist(Name, Dist) Functions:FadeOutOnDist(Distance, Dist) Functions:FadeOutOnDist(Weapon, Dist) Functions:FadeOutOnDist(Healthbar, Dist) Functions:FadeOutOnDist(BehindHealthbar, Dist) Functions:FadeOutOnDist(HealthText, Dist) Functions:FadeOutOnDist(WeaponIcon, Dist) Functions:FadeOutOnDist(LeftTop, Dist) Functions:FadeOutOnDist(LeftSide, Dist) Functions:FadeOutOnDist(BottomSide, Dist) Functions:FadeOutOnDist(BottomDown, Dist) Functions:FadeOutOnDist(RightTop, Dist) Functions:FadeOutOnDist(RightSide, Dist) Functions:FadeOutOnDist(BottomRightSide, Dist) Functions:FadeOutOnDist(BottomRightDown, Dist) Functions:FadeOutOnDist(Chams, Dist) Functions:FadeOutOnDist(Flag1, Dist) Functions:FadeOutOnDist(Flag2, Dist) end if ESP.TeamCheck and plr ~= LocalPlayer and ((LocalPlayer.Team ~= plr.Team and plr.Team) or (not LocalPlayer.Team and not plr.Team)) and plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") and plr.Character:FindFirstChild("Humanoid") then do -- Chams Chams.Adornee = plr.Character Chams.Enabled = ESP.Drawing.Chams.Enabled Chams.FillColor = chamColor Chams.OutlineColor = chamColor do -- Breathe if ESP.Drawing.Chams.Thermal then local breathe_effect = math.atan(math.sin(tick() * 2)) * 2 / math.pi Chams.FillTransparency = ESP.Drawing.Chams.Fill_Transparency * breathe_effect * 0.01 Chams.OutlineTransparency = ESP.Drawing.Chams.Outline_Transparency * breathe_effect * 0.01 else Chams.FillTransparency = ESP.Drawing.Chams.Fill_Transparency * 0.01 Chams.OutlineTransparency = ESP.Drawing.Chams.Outline_Transparency * 0.01 end end if ESP.Drawing.Chams.VisibleCheck then Chams.DepthMode = "Occluded" else Chams.DepthMode = "AlwaysOnTop" end end; do -- Corner Boxes LeftTop.Visible = ESP.Drawing.Boxes.Corner.Enabled LeftTop.Position = UDim2.new(0, Pos.X - w / 2, 0, Pos.Y - h / 2) LeftTop.Size = UDim2.new(0, w / 5, 0, 1) LeftTop.BackgroundColor3 = boxColor LeftSide.Visible = ESP.Drawing.Boxes.Corner.Enabled LeftSide.Position = UDim2.new(0, Pos.X - w / 2, 0, Pos.Y - h / 2) LeftSide.Size = UDim2.new(0, 1, 0, h / 5) LeftSide.BackgroundColor3 = boxColor BottomSide.Visible = ESP.Drawing.Boxes.Corner.Enabled BottomSide.Position = UDim2.new(0, Pos.X - w / 2, 0, Pos.Y + h / 2) BottomSide.Size = UDim2.new(0, 1, 0, h / 5) BottomSide.AnchorPoint = Vector2.new(0, 5) BottomSide.BackgroundColor3 = boxColor BottomDown.Visible = ESP.Drawing.Boxes.Corner.Enabled BottomDown.Position = UDim2.new(0, Pos.X - w / 2, 0, Pos.Y + h / 2) BottomDown.Size = UDim2.new(0, w / 5, 0, 1) BottomDown.AnchorPoint = Vector2.new(0, 1) BottomDown.BackgroundColor3 = boxColor RightTop.Visible = ESP.Drawing.Boxes.Corner.Enabled RightTop.Position = UDim2.new(0, Pos.X + w / 2, 0, Pos.Y - h / 2) RightTop.Size = UDim2.new(0, w / 5, 0, 1) RightTop.AnchorPoint = Vector2.new(1, 0) RightTop.BackgroundColor3 = boxColor RightSide.Visible = ESP.Drawing.Boxes.Corner.Enabled RightSide.Position = UDim2.new(0, Pos.X + w / 2, 0, Pos.Y - h / 2) RightSide.Size = UDim2.new(0, 1, 0, h / 5) RightSide.AnchorPoint = Vector2.new(0, 0) RightSide.BackgroundColor3 = boxColor BottomRightSide.Visible = ESP.Drawing.Boxes.Corner.Enabled BottomRightSide.Position = UDim2.new(0, Pos.X + w / 2, 0, Pos.Y + h / 2) BottomRightSide.Size = UDim2.new(0, 1, 0, h / 5) BottomRightSide.AnchorPoint = Vector2.new(1, 1) BottomRightSide.BackgroundColor3 = boxColor BottomRightDown.Visible = ESP.Drawing.Boxes.Corner.Enabled BottomRightDown.Position = UDim2.new(0, Pos.X + w / 2, 0, Pos.Y + h / 2) BottomRightDown.Size = UDim2.new(0, w / 5, 0, 1) BottomRightDown.AnchorPoint = Vector2.new(1, 1) BottomRightDown.BackgroundColor3 = boxColor end do -- Boxes Box.Position = UDim2.new(0, Pos.X - w / 2, 0, Pos.Y - h / 2) Box.Size = UDim2.new(0, w, 0, h) Box.Visible = ESP.Drawing.Boxes.Full.Enabled; -- Gradient if ESP.Drawing.Boxes.Filled.Enabled then Box.BackgroundColor3 = fillColor Box.BackgroundTransparency = ESP.Drawing.Boxes.Filled.Transparency / 100 Box.BorderSizePixel = 1 else Box.BackgroundTransparency = 1 end -- Animation RotationAngle = RotationAngle + (tick() - Tick) * ESP.Drawing.Boxes.RotationSpeed * math.cos(math.pi / 4 * tick() - math.pi / 2) if ESP.Drawing.Boxes.Animate then Gradient1.Rotation = RotationAngle Gradient2.Rotation = RotationAngle else Gradient1.Rotation = -45 Gradient2.Rotation = -45 end Tick = tick() Gradient1.Color = ColorSequence.new{ColorSequenceKeypoint.new(0, boxColor), ColorSequenceKeypoint.new(1, ESP.Drawing.Boxes.GradientFillRGB2)} Gradient2.Color = ColorSequence.new{ColorSequenceKeypoint.new(0, boxColor), ColorSequenceKeypoint.new(1, ESP.Drawing.Boxes.GradientRGB2)} end do -- Healthbar local health = Humanoid.Health / Humanoid.MaxHealth; Healthbar.Visible = ESP.Drawing.Healthbar.Enabled; Healthbar.Position = UDim2.new(0, Pos.X - w / 2 - 6, 0, Pos.Y - h / 2 + h * (1 - health)) Healthbar.Size = UDim2.new(0, ESP.Drawing.Healthbar.Width, 0, h * health) -- BehindHealthbar.Visible = ESP.Drawing.Healthbar.Enabled; BehindHealthbar.Position = UDim2.new(0, Pos.X - w / 2 - 6, 0, Pos.Y - h / 2) BehindHealthbar.Size = UDim2.new(0, ESP.Drawing.Healthbar.Width, 0, h) -- Health Text do if ESP.Drawing.Healthbar.HealthText then local healthPercentage = math.floor(Humanoid.Health / Humanoid.MaxHealth * 100) HealthText.Position = UDim2.new(0, Pos.X - w / 2 - 6, 0, Pos.Y - h / 2 + h * (1 - healthPercentage / 100) + 3) HealthText.Text = tostring(healthPercentage) HealthText.Visible = Humanoid.Health < Humanoid.MaxHealth HealthText.TextColor3 = textColor HealthText.TextSize = ESP.FontSize if ESP.Drawing.Healthbar.Lerp then local frac = health local r = math.min(255, 510 * (1 - frac)) local g = math.min(255, 510 * frac) local color = Color3.fromRGB(r, g, 0) HealthText.TextColor3 = color else HealthText.TextColor3 = ESP.Drawing.Healthbar.HealthTextRGB end end end end do -- Names Name.Visible = ESP.Drawing.Names.Enabled Name.TextColor3 = textColor Name.TextSize = ESP.FontSize if ESP.Options.Friendcheck and lplayer:IsFriendsWith(plr.UserId) then Name.Text = string.format('(F) %s', ESP.Options.FriendcheckRGB.R * 255, ESP.Options.FriendcheckRGB.G * 255, ESP.Options.FriendcheckRGB.B * 255, plr.Name) else Name.Text = string.format('(E) %s', 255, 0, 0, plr.Name) end Name.Position = UDim2.new(0, Pos.X, 0, Pos.Y - h / 2 - 9) end do -- Distance and Tool Text & Positioning (Fixed) local bottomOffset = Pos.Y + h / 2 local distEnabled = ESP.Drawing.Distances.Enabled -- 1. Handle Distance Visibility if distEnabled then Distance.TextColor3 = textColor Distance.TextSize = ESP.FontSize Distance.Position = UDim2.new(0, Pos.X, 0, bottomOffset + 7) if ESP.Drawing.Distances.Position == "Bottom" then Distance.Text = string.format("%d meters", math.floor(Dist)) Distance.Visible = true bottomOffset = bottomOffset + 12 -- Add padding for Tool below elseif ESP.Drawing.Distances.Position == "Text" then -- Combined in Name Logic (distance hidden here) Distance.Visible = false -- Logic is inside name block in original script, but simple update here: if ESP.Options.Friendcheck and lplayer:IsFriendsWith(plr.UserId) then Name.Text = string.format('(F) %s [%d]', ESP.Options.FriendcheckRGB.R * 255, ESP.Options.FriendcheckRGB.G * 255, ESP.Options.FriendcheckRGB.B * 255, plr.Name, math.floor(Dist)) else Name.Text = string.format('(E) %s [%d]', 255, 0, 0, plr.Name, math.floor(Dist)) end end else Distance.Visible = false end -- 2. Handle Tool Visibility & Positioning -- Logic separate from Distance check so position updates even if distance is off local tool = plr.Character:FindFirstChildOfClass("Tool") or (plr.Backpack and plr.Backpack:FindFirstChildOfClass("Tool")) if ESP.Drawing.Weapons.Enabled then Weapon.TextColor3 = textColor Weapon.TextSize = ESP.FontSize -- Calculate Weapon Position based on updated bottomOffset -- Note: Original script added +18 / +15 relative to Y+h/2. -- If distance is there, bottomOffset increased. Weapon.Position = UDim2.new(0, Pos.X, 0, bottomOffset + 11) WeaponIcon.Position = UDim2.new(0, Pos.X - 21, 0, bottomOffset + 8) if tool then Weapon.Text = tool.Name WeaponIcon.Image = Weapon_Icons[tool.Name] or "" else Weapon.Text = "none" WeaponIcon.Image = "" end Weapon.Visible = true WeaponIcon.Visible = true -- Ensuring Icon visible else Weapon.Visible = false WeaponIcon.Visible = false -- Ensuring Icon hidden end end else HideESP(); end else HideESP(); end else HideESP(); end end) end coroutine.wrap(Updater)(); end do -- Update ESP for _, v in pairs(game:GetService("Players"):GetPlayers()) do if v.Name ~= lplayer.Name then coroutine.wrap(ESPFunc)(v) end end -- game:GetService("Players").PlayerAdded:Connect(function(v) coroutine.wrap(ESPFunc)(v) end); end; end; Players.PlayerRemoving:Connect(function(p) if ScreenGui:FindFirstChild(p.Name) then ScreenGui[p.Name]:Destroy() end end) -- ============================================================== -- PREDICTION FORESHADOW (GHOST CLONE) SYSTEM (OPTIMIZED) -- ============================================================== local GhostCharacter = nil local GhostPartsCache = {} local function ClearGhost() if GhostCharacter then GhostCharacter:Destroy() GhostCharacter = nil end GhostPartsCache = {} end local function UpdateGhost(target, predictedPos) if not target or not target:FindFirstChild("HumanoidRootPart") then ClearGhost() return end -- 1. Create Ghost if missing or target changed if not GhostCharacter or GhostCharacter.Name ~= target.Name .. "_Ghost" then ClearGhost() GhostCharacter = Instance.new("Model") GhostCharacter.Name = target.Name .. "_Ghost" GhostCharacter.Parent = workspace.CurrentCamera -- Client side only -- Clone visual parts only for _, v in pairs(target:GetChildren()) do if v:IsA("BasePart") and v.Name ~= "HumanoidRootPart" then local clone = v:Clone() clone:ClearAllChildren() -- Remove scripts/welds to prevent lag/interactions clone.Parent = GhostCharacter clone.Anchored = true clone.CanCollide = false clone.CanTouch = false clone.CanQuery = false clone.Material = Enum.Material.Plastic -- Plastic material clone.Color = Options.GhostColor.Value clone.Transparency = Options.GhostTransparency.Value clone.CastShadow = false -- Cache the mapping of original name -> clone part GhostPartsCache[v.Name] = clone if v:IsA("MeshPart") then clone.TextureID = "" end end end end -- 2. Move Ghost to Predicted Position local currentHRP = target:FindFirstChild("HumanoidRootPart") if currentHRP then local currentPos = currentHRP.Position -- The offset from current player to predicted position local offset = predictedPos - currentPos -- Get Visual Settings local gColor = Options.GhostColor.Value local gTrans = Options.GhostTransparency.Value for origName, clonePart in pairs(GhostPartsCache) do local originalPart = target:FindFirstChild(origName) if originalPart then -- Apply the offset to every part's CFrame to maintain animation pose clonePart.CFrame = originalPart.CFrame + offset -- Update visuals live clonePart.Color = gColor clonePart.Transparency = gTrans end end end end -- Aimbot functions -- EXPANDED BODY PARTS LIST TO INCLUDE R6 PARTS (Torso, Arms, Legs) local bodyParts = { "Head", "UpperTorso", "LowerTorso", "HumanoidRootPart", "LeftUpperArm", "RightUpperArm", "LeftLowerArm", "RightLowerArm", "LeftHand", "RightHand", "LeftUpperLeg", "RightUpperLeg", "LeftLowerLeg", "RightLowerLeg", "LeftFoot", "RightFoot", "Torso", "Left Arm", "Right Arm", "Left Leg", "Right Leg" -- R6 Parts } local function getClosestTarget() local closest, closestDist = nil, math.huge local mousePos = UserInputService:GetMouseLocation() for _, player in pairs(Players:GetPlayers()) do if player == LocalPlayer then continue end local character = player.Character if not character then continue end if Toggles.ForceFieldCheck.Value and character:FindFirstChildOfClass("ForceField") then continue end local hrp = character:FindFirstChild("HumanoidRootPart") if not hrp then continue end if Toggles.TeamCheck.Value and LocalPlayer.Team and player.Team == LocalPlayer.Team then continue end local playerWL = (Options.PlayerWhitelist and Options.PlayerWhitelist.Value) or {} local teamWL = (Options.TeamWhitelist and Options.TeamWhitelist.Value) or {} if selectionContains(playerWL, player) then continue end if player.Team and selectionContains(teamWL, player.Team) then continue end if Toggles.HealthCheck.Value then local humanoid = character:FindFirstChildOfClass("Humanoid") if not humanoid or humanoid.Health <= 0 then continue end if humanoid.Health < Options.MinHealth.Value then continue end end local distance = (Camera.CFrame.Position - hrp.Position).Magnitude if not Toggles.InfDistance.Value and distance > Options.MaxDistance.Value then continue end local charBestDist = math.huge if Toggles.AimVisibleParts.Value then for _, partName in ipairs(bodyParts) do local part = character:FindFirstChild(partName) if part and isVisible(part) then local screenPos, onScreen = Camera:WorldToViewportPoint(part.Position) if onScreen then local dist = (Vector2.new(screenPos.X, screenPos.Y) - mousePos).Magnitude if dist < charBestDist then charBestDist = dist end end end end else local part = getAimPart(character) if part and isVisible(part) then local screenPos, onScreen = Camera:WorldToViewportPoint(part.Position) if onScreen then charBestDist = (Vector2.new(screenPos.X, screenPos.Y) - mousePos).Magnitude end end end if charBestDist <= Options.FOVRadius.Value and charBestDist < closestDist then closest = character closestDist = charBestDist end end if Toggles.AimNPCs.Value then for _, npc in pairs(workspace:GetChildren()) do local playerFromChar = Players:GetPlayerFromCharacter(npc) if playerFromChar then continue end if npc == LocalCharacter then continue end if not npc:IsA("Model") or not npc:FindFirstChild("Humanoid") or not npc:FindFirstChild("HumanoidRootPart") then continue end if Toggles.ForceFieldCheck.Value and npc:FindFirstChildOfClass("ForceField") then continue end local hrp = npc.HumanoidRootPart local humanoid = npc:FindFirstChild("Humanoid") if Toggles.HealthCheck.Value then if not humanoid or humanoid.Health <= 0 then continue end if humanoid.Health < Options.MinHealth.Value then continue end end local distance = (Camera.CFrame.Position - hrp.Position).Magnitude if not Toggles.InfDistance.Value and distance > Options.MaxDistance.Value then continue end local charBestDist = math.huge if Toggles.AimVisibleParts.Value then for _, partName in ipairs(bodyParts) do local part = npc:FindFirstChild(partName) if part and isVisible(part) then local screenPos, onScreen = Camera:WorldToViewportPoint(part.Position) if onScreen then local dist = (Vector2.new(screenPos.X, screenPos.Y) - mousePos).Magnitude if dist < charBestDist then charBestDist = dist end end end end else local part = getAimPart(npc) if part and isVisible(part) then local screenPos, onScreen = Camera:WorldToViewportPoint(part.Position) if onScreen then charBestDist = (Vector2.new(screenPos.X, screenPos.Y) - mousePos).Magnitude end end end if charBestDist <= Options.FOVRadius.Value and charBestDist < closestDist then closest = npc closestDist = charBestDist end end end return closest end local function isValidLockedTarget(targetChar) if not targetChar or not targetChar.Parent then return false end if Toggles.ForceFieldCheck.Value and targetChar:FindFirstChildOfClass("ForceField") then return false end local hrp = targetChar:FindFirstChild("HumanoidRootPart") if not hrp then return false end local humanoid = targetChar:FindFirstChildOfClass("Humanoid") if not humanoid or humanoid.Health <= 0 then return false end if Toggles.HealthCheck.Value and humanoid.Health < Options.MinHealth.Value then return false end local distance = (Camera.CFrame.Position - hrp.Position).Magnitude if not Toggles.InfDistance.Value and distance > Options.MaxDistance.Value then return false end local player = Players:GetPlayerFromCharacter(targetChar) if player then if Toggles.TeamCheck.Value and LocalPlayer.Team and player.Team == LocalPlayer.Team then return false end local playerWL = (Options.PlayerWhitelist and Options.PlayerWhitelist.Value) or {} local teamWL = (Options.TeamWhitelist and Options.TeamWhitelist.Value) or {} if selectionContains(playerWL, player) then return false end if player.Team and selectionContains(teamWL, player.Team) then return false end end return true end -- Aimbot & Triggerbot toggle states local lockedTarget = nil local stickyTarget = nil local Clicked = false -- Main Render RenderStepped loop RunService.RenderStepped:Connect(function(dt) hue = (hue + dt * 0.25) % 1 updateMouseLock() local mousePos = UserInputService:GetMouseLocation() if FOVCircle then FOVCircle.Position = mousePos FOVCircle.Radius = Options.FOVRadius.Value FOVCircle.Visible = Toggles.AimbotEnabled.Value and Toggles.FovVisible.Value if Toggles.RainbowFov.Value then FOVCircle.Color = Color3.fromHSV(hue,1,1) else FOVCircle.Color = Options.FovColor.Value end end local triggerActive = Toggles.TriggerbotEnabled.Value if triggerActive then local targetPart = mouse.Target if targetPart then local char = targetPart.Parent local humanoid = char:FindFirstChildOfClass("Humanoid") if not humanoid then char = targetPart.Parent.Parent humanoid = char:FindFirstChildOfClass("Humanoid") end if humanoid and humanoid.Health > 0 and char.Name ~= LocalPlayer.Name then local hrp = char:FindFirstChild("HumanoidRootPart") if not hrp then if Clicked then mouse1release() Clicked = false end else local playerFromChar = Players:GetPlayerFromCharacter(char) local shouldShoot = true if Toggles.ForceFieldCheck.Value and char:FindFirstChildOfClass("ForceField") then shouldShoot = false end if playerFromChar then if Toggles.TeamCheck.Value and LocalPlayer.Team and playerFromChar.Team == LocalPlayer.Team then shouldShoot = false end local playerWL = (Options.PlayerWhitelist and Options.PlayerWhitelist.Value) or {} local teamWL = (Options.TeamWhitelist and Options.TeamWhitelist.Value) or {} if selectionContains(playerWL, playerFromChar) then shouldShoot = false end if playerFromChar.Team and selectionContains(teamWL, playerFromChar.Team) then shouldShoot = false end end local dist = (LocalHumanoidRootPart.Position - hrp.Position).Magnitude if Toggles.TriggerDistanceCheck.Value and dist > Options.TriggerMaxDistance.Value then shouldShoot = false end local visible = not Toggles.TriggerbotWallCheck.Value or isVisible(targetPart) if not visible then shouldShoot = false end if shouldShoot then -- SET TARGET FOR HITSOUNDS Target = char if not Clicked then mouse1press() Clicked = true end else if Clicked then mouse1release() Clicked = false end end end else if Clicked then mouse1release() Clicked = false end end else if Clicked then mouse1release() Clicked = false end end else if Clicked then mouse1release() Clicked = false end end if not Toggles.AimbotEnabled.Value then -- Don't clear target if triggerbot is using it if not triggerActive then Target = nil end lockedTarget = nil stickyTarget = nil CurrentLockedTarget = nil PerceivedPos = nil PerceivedVel = Vector3.new() JustLocked = true ClearGhost() return end local mousePos = UserInputService:GetMouseLocation() local aimbotActive = false if Options.AimbotKeybind and type(Options.AimbotKeybind.GetState) == "function" then aimbotActive = Options.AimbotKeybind:GetState() end if not aimbotActive then Target = nil lockedTarget = nil stickyTarget = nil CurrentLockedTarget = nil PerceivedPos = nil PerceivedVel = Vector3.new() JustLocked = true ClearGhost() -- Cleanup ghost return end local currentTarget = nil -- --- TARGET SELECTION LOGIC --- if Toggles.OutwallAim.Value then if not lockedTarget or not isValidLockedTarget(lockedTarget) then lockedTarget = getClosestTarget() end currentTarget = lockedTarget elseif Toggles.StickyAim.Value then -- STICKY AIM FIXED LOGIC if stickyTarget and not isValidLockedTarget(stickyTarget) then stickyTarget = nil end if stickyTarget then local part = stickyTarget:FindFirstChild("HumanoidRootPart") if part then local screenPos, onScreen = Camera:WorldToViewportPoint(part.Position) local distFromMouse = (Vector2.new(screenPos.X, screenPos.Y) - mousePos).Magnitude if not onScreen or distFromMouse > Options.FOVRadius.Value then stickyTarget = nil end if stickyTarget and Toggles.StickyWallCheck.Value then local aimP = getAimPart(stickyTarget) if aimP and not isVisible(aimP) then stickyTarget = nil end end else stickyTarget = nil end end if not stickyTarget then stickyTarget = getClosestTarget() end currentTarget = stickyTarget else -- REACTION TIME LOGIC FIX local newClosest = getClosestTarget() if CurrentLockedTarget and isValidLockedTarget(CurrentLockedTarget) then if newClosest ~= CurrentLockedTarget then if PendingTarget ~= newClosest then PendingTarget = newClosest TargetSwitchTimer = tick() end if tick() - TargetSwitchTimer >= TargetReactionDelay then currentTarget = newClosest CurrentLockedTarget = currentTarget else currentTarget = CurrentLockedTarget end else currentTarget = CurrentLockedTarget PendingTarget = nil end else currentTarget = newClosest CurrentLockedTarget = currentTarget PendingTarget = nil end end -- DEAD SWITCH DELAY CHECK if CurrentLockedTarget and CurrentLockedTarget:FindFirstChild("Humanoid") and CurrentLockedTarget.Humanoid.Health <= 0 then if DeathDelayStart == 0 then DeathDelayStart = tick() end CurrentLockedTarget = nil end if DeathDelayStart > 0 and (tick() - DeathDelayStart) < Options.DeadDelay.Value then Target = nil JustLocked = true ClearGhost() return elseif DeathDelayStart > 0 then DeathDelayStart = 0 end if not currentTarget then Target = nil PerceivedPos = nil PerceivedVel = Vector3.new() JustLocked = true ClearGhost() -- Cleanup ghost return end -- ===================================== -- AIM PART SELECTION (VISIBLE/SWITCH PART FIX) -- ===================================== local aimPart = nil local useWallCheck = Toggles.WallCheck.Value and not (Toggles.StickyAim.Value and Toggles.StickyWallCheck.Value and currentTarget == stickyTarget) -- 1. Check "Aim Visible Parts" (Highest Priority if enabled) if Toggles.AimVisibleParts.Value then local bestDist = math.huge local bestPart = nil for _, partName in ipairs(bodyParts) do local part = currentTarget:FindFirstChild(partName) if part and isVisible(part) then -- Only care if it's visible local scr, onScreen = Camera:WorldToViewportPoint(part.Position) if onScreen then local dist = (Vector2.new(scr.X, scr.Y) - mousePos).Magnitude if dist < bestDist then bestDist = dist bestPart = part end end end end if bestPart then aimPart = bestPart end end -- 2. If no visible part found (or setting disabled), use Switch Part logic or Default if not aimPart then if Toggles.SwitchPart.Value then -- Switch Part Logic (Delay based - Closest Part) if tick() - LastPartSwitchTime > Options.SwitchPartDelay.Value then local closestP = nil local closestDist = math.huge -- Iterate all body parts to find closest to cursor for _, partName in ipairs(bodyParts) do local part = currentTarget:FindFirstChild(partName) if part then local scr, onScreen = Camera:WorldToViewportPoint(part.Position) if onScreen then local dist = (Vector2.new(scr.X, scr.Y) - mousePos).Magnitude if dist < closestDist then closestDist = dist closestP = partName end end end end if closestP then CurrentSwitchPart = closestP end LastPartSwitchTime = tick() end -- Try to get the switched part aimPart = getAimPart(currentTarget, CurrentSwitchPart) end -- 3. Fallback to Main Aim Part (if SwitchPart didn't set one or failed) if not aimPart then aimPart = getAimPart(currentTarget) end end -- Final Wallcheck Validation (if applicable) if useWallCheck and aimPart and not isVisible(aimPart) then aimPart = nil end if not aimPart then Target = nil PerceivedPos = nil PerceivedVel = Vector3.new() JustLocked = true ClearGhost() -- Cleanup ghost return end local currentVelocity = aimPart.AssemblyLinearVelocity or Vector3.new() local currentWorldPos = aimPart.Position local now = tick() -- First lock or target change = instant if JustLocked then PerceivedPos = currentWorldPos PerceivedVel = currentVelocity LastUpdateTimeX = now LastUpdateTimeY = now JustLocked = false end -- Force update on landing to prevent downward drift local LANDING_THRESHOLD = 1 -- If current Y vel near 0 local FALLING_THRESHOLD = -10 -- And perceived was falling if math.abs(currentVelocity.Y) < LANDING_THRESHOLD and PerceivedVel.Y < FALLING_THRESHOLD then PerceivedPos = Vector3.new(PerceivedPos.X, currentWorldPos.Y, PerceivedPos.Z) PerceivedVel = Vector3.new(PerceivedVel.X, currentVelocity.Y, PerceivedVel.Z) LastUpdateTimeY = now end -- Update perception for X/Z (horizontal) and Y (vertical) independently if now - LastUpdateTimeX >= ReactionDelayX then PerceivedPos = Vector3.new(currentWorldPos.X, PerceivedPos.Y, currentWorldPos.Z) PerceivedVel = Vector3.new(currentVelocity.X, PerceivedVel.Y, currentVelocity.Z) LastUpdateTimeX = now end if now - LastUpdateTimeY >= ReactionDelayY then PerceivedPos = Vector3.new(PerceivedPos.X, currentWorldPos.Y, PerceivedPos.Z) PerceivedVel = Vector3.new(PerceivedVel.X, currentVelocity.Y, PerceivedVel.Z) LastUpdateTimeY = now end local timeSinceX = now - LastUpdateTimeX local timeSinceY = now - LastUpdateTimeY -- Extrapolate X/Z and Y with independent times local perceivedX = PerceivedPos.X + PerceivedVel.X * timeSinceX local perceivedY = PerceivedPos.Y + PerceivedVel.Y * timeSinceY local perceivedZ = PerceivedPos.Z + PerceivedVel.Z * timeSinceX local perceivedWorldPos = Vector3.new(perceivedX, perceivedY, perceivedZ) -- THIS IS WHERE THE TARGET WILL BE local predictedWorldPos = perceivedWorldPos + PerceivedVel * Options.Prediction.Value -- ============================================================== -- UPDATE GHOST FORESHADOW -- ============================================================== if Toggles.PredictionForeshadow.Value and currentTarget then local hrp = currentTarget:FindFirstChild("HumanoidRootPart") if hrp then local predHrpPos = hrp.Position + (hrp.AssemblyLinearVelocity * Options.Prediction.Value) UpdateGhost(currentTarget, predHrpPos) end else ClearGhost() end -- ============================================================== local screenPos, onScreen = Camera:WorldToViewportPoint(predictedWorldPos) if not onScreen then Target = nil JustLocked = true ClearGhost() -- Cleanup ghost return end local mousePos = UserInputService:GetMouseLocation() -- [[ FIX: If Silent Aim is ON and Aimbot is ON, stop Mouse Moving here! ]] -- if Toggles.SilentAim.Value then Target = currentTarget return end if Options.AimMethod.Value == "Mouse" then local currentSmoothnessX = Options.XSmoothness.Value local currentSmoothnessY = Options.YSmoothness.Value local dist = (Vector2.new(screenPos.X, screenPos.Y) - mousePos).Magnitude -- FIX: Snap Back only activates if target is >100px away (e.g. due to drift) -- If close (<100px), standard smoothness is used to avoid jitter/instant snaps. if dist > 100 then currentSmoothnessX = Options.SnapBackSpeed.Value currentSmoothnessY = Options.SnapBackSpeed.Value end local deltaX = (screenPos.X - mousePos.X) / math.max(1, currentSmoothnessX) local deltaY = (screenPos.Y - mousePos.Y) / math.max(1, currentSmoothnessY) deltaX = deltaX + math.random(-1, 1) * 0.15 deltaY = deltaY + math.random(-1, 1) * 0.15 if mousemoverel then mousemoverel(deltaX, deltaY) end elseif Options.AimMethod.Value == "Camera" then local targetCFrame = CFrame.lookAt(Camera.CFrame.Position, predictedWorldPos) local avgSmoothness = (Options.XSmoothness.Value + Options.YSmoothness.Value) / 2 local alpha = 1 / math.max(1, avgSmoothness) Camera.CFrame = Camera.CFrame:Lerp(targetCFrame, alpha) end if Target ~= currentTarget then JustLocked = true end Target = currentTarget end) -- UI Settings local MenuGroup = Tabs["UI Settings"]:AddLeftGroupbox("Menu") MenuGroup:AddToggle("KeybindMenuOpen", { Default = Library.KeybindFrame.Visible, Text = "Keybind Menu", Callback = function(Value) Library.KeybindFrame.Visible = Value end }) MenuGroup:AddLabel("Menu bind"):AddKeyPicker("MenuKeybind", { Default = "RightShift", NoUI = true, Text = "Menu keybind" }) MenuGroup:AddButton({ Text = "Unload", Func = function() getgenv().ObsidianV1Running = false -- Reset the check ClearGhost() Library:Unload() end }) Library.ToggleKeybind = Options.MenuKeybind ThemeManager:SetLibrary(Library) SaveManager:SetLibrary(Library) SaveManager:IgnoreThemeSettings() SaveManager:SetIgnoreIndexes({ "MenuKeybind", "AimbotKeybind", "TriggerbotKeybind" }) ThemeManager:ApplyToTab(Tabs["UI Settings"]) SaveManager:BuildConfigSection(Tabs["UI Settings"]) SaveManager:LoadAutoloadConfig() Library:Notify("Obsidian GUI Loaded!", 5)