-- ========================================================================= -- [ SPONGY.CC - FULL BUILD | RAINBOW CUBE + TRACERS + GRENADE ESP + WEAPON ESP ] -- [ BloxStrike Edition | by Axiom & Number6 ] -- ========================================================================= local MaterialLimits = { [Enum.Material.Asphalt] = 0.25, [Enum.Material.Basalt] = 0.25, [Enum.Material.Brick] = 0.25, [Enum.Material.Cobblestone] = 0.25, [Enum.Material.Concrete] = 0.25, [Enum.Material.CrackedLava] = 0.25, [Enum.Material.DiamondPlate] = 0.25, [Enum.Material.Foil] = 0.25, [Enum.Material.Glacier] = 0.25, [Enum.Material.Granite] = 0.25, [Enum.Material.Grass] = 0.25, [Enum.Material.Ground] = 0.25, [Enum.Material.Ice] = 0.25, [Enum.Material.LeafyGrass] = 0.25, [Enum.Material.Limestone] = 0.25, [Enum.Material.Marble] = 0.25, [Enum.Material.Metal] = 0.25, [Enum.Material.Mud] = 0.25, [Enum.Material.Pavement] = 0.25, [Enum.Material.Rock] = 0.25, [Enum.Material.Salt] = 0.25, [Enum.Material.Sand] = 0.25, [Enum.Material.Sandstone] = 0.25, [Enum.Material.Slate] = 0.25, [Enum.Material.Snow] = 0.25, [Enum.Material.ForceField] = 0.25, [Enum.Material.Neon] = 0.25, [Enum.Material.CorrodedMetal] = 0.25, [Enum.Material.Pebble] = 0.25, [Enum.Material.CeramicTiles] = 0.25, [Enum.Material.Plaster] = 0.25, [Enum.Material.Plastic] = 7, [Enum.Material.SmoothPlastic] = 7, [Enum.Material.Wood] = 7, [Enum.Material.WoodPlanks] = 7, [Enum.Material.Cardboard] = 7, [Enum.Material.Glass] = 100, [Enum.Material.Fabric] = 100 } local MaterialVariantLimits = { ["IndoorWall"] = 0.25, ["Sandy Brick"] = 0.25 } local Players = game:GetService("Players") local Workspace = game:GetService("Workspace") local RunService = game:GetService("RunService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local UserInputService = game:GetService("UserInputService") local SoundService = game:GetService("SoundService") local Lighting = game:GetService("Lighting") local LP = Players.LocalPlayer local Camera = Workspace.CurrentCamera -- ========================================================================= -- [ PENETRATION SYSTEM ] -- ========================================================================= local function GetPenetrationStats(origin, direction, maxPen, ignoreList, targetRoot) local params = RaycastParams.new() params.FilterType = Enum.RaycastFilterType.Exclude params.CollisionGroup = "Bullet" local filter = ignoreList or {LP.Character, Camera} params.FilterDescendantsInstances = filter local currentOrigin = origin local currentDir = direction local accMat = {} local accVar = {} local stats = { TotalThickness = 0, MaterialStats = {}, Success = false, FailReason = "Max Steps", EndPos = Vector3.zero } local backParams = RaycastParams.new() backParams.FilterType = Enum.RaycastFilterType.Include backParams.CollisionGroup = "Bullet" for i = 1, 100 do if not currentOrigin or not currentDir then break end local result = Workspace:Raycast(currentOrigin, currentDir * 1000, params) if not result then if not targetRoot then stats.Success = true stats.EndPos = currentOrigin + (currentDir * 1000) else stats.FailReason = "Void (Missed)" end break end if not result.Instance or not result.Instance.Parent then stats.FailReason = "Destroyed Instance" break end if targetRoot and result.Instance:IsDescendantOf(targetRoot) then stats.Success = true stats.EndPos = result.Position stats.FailReason = "Hit" return stats end table.insert(filter, result.Instance) params.FilterDescendantsInstances = filter local enterPos = result.Position local fakeEnd = enterPos + (currentDir * 1000) backParams.FilterDescendantsInstances = {result.Instance} local backRes = Workspace:Raycast(fakeEnd, enterPos - fakeEnd, backParams) local thickness = 0.5 local limit = 0.25 local matName = result.Instance.Material.Name if not backRes then thickness = 5 stats.FailReason = "Infinite/Block" else thickness = (enterPos - backRes.Position).Magnitude local variant = backRes.Instance.MaterialVariant if variant ~= "" and MaterialVariantLimits[variant] then matName = variant limit = MaterialVariantLimits[variant] accVar[variant] = (accVar[variant] or 0) + thickness if accVar[variant] > limit + maxPen then stats.FailReason = string.format("Var: %s (%.1f > %.1f)", variant, accVar[variant], limit + maxPen) stats.MaterialStats = {Type = "Variant", Name = variant, Thickness = accVar[variant], Limit = limit + maxPen} return stats end else local mat = backRes.Material matName = mat.Name limit = MaterialLimits[mat] or 0.25 accMat[mat] = (accMat[mat] or 0) + thickness if accMat[mat] > limit + maxPen then stats.FailReason = string.format("%s (%.1f / %.1f)", matName, accMat[mat], limit + maxPen) stats.MaterialStats = {Type = "Material", Name = matName, Thickness = accMat[mat], Limit = limit + maxPen} return stats end end currentOrigin = backRes.Position end stats.TotalThickness = stats.TotalThickness + thickness end return stats end -- ========================================================================= -- [ MATH & BHOP HELPERS ] -- ========================================================================= local function GetMoveDirection() local Direction = Vector3.zero local LookVector = Camera.CFrame.LookVector local RightVector = Camera.CFrame.RightVector if UserInputService:IsKeyDown(Enum.KeyCode.W) then Direction += LookVector end if UserInputService:IsKeyDown(Enum.KeyCode.S) then Direction -= LookVector end if UserInputService:IsKeyDown(Enum.KeyCode.A) then Direction -= RightVector end if UserInputService:IsKeyDown(Enum.KeyCode.D) then Direction += RightVector end return Vector3.new(Direction.X, 0, Direction.Z).Unit end local charfolder = Workspace:WaitForChild("Characters", 10) local function get_player_team(player) if not player then return nil end if player.Team then return player.Team.Name end return nil end local function IsValidTarget(character, teamCheckEnabled) if not character or not character:FindFirstChild("HumanoidRootPart") then return false end local targetPlayer = Players:GetPlayerFromCharacter(character) if not targetPlayer or targetPlayer == LP then return false end if teamCheckEnabled then if LP.Team and targetPlayer.Team then if LP.Team == targetPlayer.Team then return false end end if LP.Character and LP.Character.Parent and character.Parent then if LP.Character.Parent == character.Parent and character.Parent.Name ~= "Characters" then return false end end end return true end -- ========================================================================= -- [ LIBRARY INIT ] -- ========================================================================= local repo = "https://raw.githubusercontent.com/deividcomsono/Obsidian/refs/heads/main/" local Library = loadstring(game:HttpGet(repo .. "Library.lua"))() local ThemeManager = loadstring(game:HttpGet(repo .. "addons/ThemeManager.lua"))() local SaveManager = loadstring(game:HttpGet(repo .. "addons/SaveManager.lua"))() Library.Font = Enum.Font.Roboto local Options = Library.Options local Toggles = Library.Toggles local Window = Library:CreateWindow({ Title = 'MEMESENSE', Center = true, AutoShow = true, TabPadding = 8, MenuFadeTime = 0.2, Size = UDim2.new(0, 650, 0, 520) }) local Tabs = { Combat = Window:AddTab('Combat', 'swords'), Weapons = Window:AddTab('Weapons', 'crosshair'), Visuals = Window:AddTab('Visuals', 'eye'), World = Window:AddTab('World', 'globe'), Misc = Window:AddTab('Misc', 'activity'), SkinChanger = Window:AddTab('SkinChanger', 'paintbrush'), Settings = Window:AddTab('Settings', 'settings'), } -- ========================================================================= -- [ SETTINGS TAB ] -- ========================================================================= local SettingsGroup = Tabs.Settings:AddLeftGroupbox("Interface Settings", "settings") SettingsGroup:AddLabel("Menu Keybind"):AddKeyPicker("MenuKeybind", { Text = "MenuKeybind", Default = "RightShift", Mode = "Toggle", Callback = function(v) Library:Toggle() end }) UserInputService.InputBegan:Connect(function(input, gameProcessed) if not gameProcessed then local keybind = Options.MenuKeybind if keybind then local currentVal = keybind.Value local isCtrlKey = (currentVal == "LeftControl" or currentVal == "RightControl" or currentVal == "LCtrl" or currentVal == "RCtrl") if isCtrlKey then local keyCode = input.KeyCode if (currentVal == "LeftControl" or currentVal == "LCtrl") and keyCode == Enum.KeyCode.LeftControl then Library:Toggle() elseif (currentVal == "RightControl" or currentVal == "RCtrl") and keyCode == Enum.KeyCode.RightControl then Library:Toggle() end end end end end) -- ========================================================================= -- [ MISC TAB - MOVEMENT ] -- ========================================================================= local MiscBox = Tabs.Misc:AddLeftGroupbox("Movement", "activity") MiscBox:AddToggle("AutoBhop", { Text = "Auto Bhop", Default = false }) MiscBox:AddSlider("BhopSpeed", { Text = "Bhop Speed", Default = 18, Min = 5, Max = 30, Rounding = 1, Suffix = "spd" }) MiscBox:AddToggle("NoFallDamage", { Text = "No Fall Damage", Default = false }) RunService.Heartbeat:Connect(function() pcall(function() local Character = LP.Character if not Character then return end local RootPart = Character:FindFirstChild("HumanoidRootPart") local Humanoid = Character:FindFirstChild("Humanoid") if not RootPart or not Humanoid then return end if Toggles.AutoBhop and Toggles.AutoBhop.Value then if UserInputService:IsKeyDown(Enum.KeyCode.Space) then local RayParams = RaycastParams.new() RayParams.FilterDescendantsInstances = {Character} RayParams.FilterType = Enum.RaycastFilterType.Exclude local GroundCheck = Workspace:Raycast(RootPart.Position, Vector3.new(0, -4, 0), RayParams) if GroundCheck then Humanoid.Jump = true end end local Success, Result = pcall(function() return GetMoveDirection() end) if Success and Result.Magnitude > 0 then local currentBhopSpeed = math.clamp(Options.BhopSpeed and Options.BhopSpeed.Value or 18, 5, 30) local Direction = Result * currentBhopSpeed local Velocity = RootPart.AssemblyLinearVelocity local NewX = Velocity.X + (Direction.X - Velocity.X) * 0.2 local NewZ = Velocity.Z + (Direction.Z - Velocity.Z) * 0.2 RootPart.AssemblyLinearVelocity = Vector3.new(NewX, Velocity.Y, NewZ) end end end) end) RunService.Heartbeat:Connect(function() pcall(function() if Toggles.NoFallDamage and Toggles.NoFallDamage.Value then local character = LP.Character if character then local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid then pcall(function() humanoid:SetStateEnabled(Enum.HumanoidStateType.FallingDown, false) humanoid:SetStateEnabled(Enum.HumanoidStateType.Ragdoll, false) end) end end end end) end) -- ========================================================================= -- [ WORLD TAB SETUP ] -- ========================================================================= local WorldBox = Tabs.World:AddLeftGroupbox("World", "globe") local WeaponVisualBox = Tabs.World:AddRightGroupbox("Weapon Visual", "activity") -- ========================================================================= -- [ WEAPON VISUAL - TRACERS ] -- ========================================================================= WeaponVisualBox:AddToggle("BulletTracers", { Text = "Bullet Tracers", Default = false, }):AddColorPicker("BulletTracersColor", { Default = Color3.fromRGB(0, 170, 255), Title = "Tracer Color", }) WeaponVisualBox:AddDropdown("TracerStyle", { Text = "Tracer Style", Values = {"Block", "Cylinder (Obelius)"}, Default = "Block", }) WeaponVisualBox:AddToggle("TracerRainbow", { Text = "Tracer Rainbow Mode", Default = false, }) WeaponVisualBox:AddSlider("TracerTime", { Text = "Tracer Time", Default = 2, Min = 0.1, Max = 10, Rounding = 1, Suffix = "s" }) WeaponVisualBox:AddToggle("BulletImpacts", { Text = "Bullet Impacts", Default = false, }):AddColorPicker("BulletImpactsColor", { Default = Color3.fromRGB(255, 0, 0), Title = "Impact Color", }) -- ========================================================================= -- [ GRENADE ESP - TRACERS ONLY (NO WARNING BOX) ] -- ========================================================================= local GrenadeVisualBox = Tabs.Visuals:AddRightGroupbox("Grenade ESP", "activity") GrenadeVisualBox:AddToggle("GrenadeTracers", { Text = "Grenade Tracers", Default = false, }):AddColorPicker("GrenadeTracerColor", { Default = Color3.fromRGB(255, 100, 0), Title = "Tracer Color", }) GrenadeVisualBox:AddToggle("MolotovZoneESP", { Text = "Molotov Zone ESP", Default = false, }):AddColorPicker("GrenadeZoneColor", { Default = Color3.fromRGB(255, 60, 0), Title = "Zone Color", }) GrenadeVisualBox:AddToggle("SmokeZoneESP", { Text = "Smoke Zone ESP", Default = false, }):AddColorPicker("SmokeZoneColor", { Default = Color3.fromRGB(180, 180, 180), Title = "Smoke Color", }) -- ========================================================================= -- [ CUSTOM HANDS ] -- ========================================================================= local CustomHandsBox = Tabs.World:AddRightGroupbox("Custom Hands Postition", "crosshair") CustomHandsBox:AddToggle("CustomHandsEnabled", { Text = "Enable", Default = false }) CustomHandsBox:AddSlider("HandsX", { Text = "X", Default = 0.2, Min = -2, Max = 2, Rounding = 3, Suffix = "studs" }) CustomHandsBox:AddSlider("HandsY", { Text = "Y", Default = -0.155, Min = -2, Max = 2, Rounding = 3, Suffix = "studs" }) CustomHandsBox:AddSlider("HandsZ", { Text = "Z", Default = 0.075, Min = -2, Max = 2, Rounding = 3, Suffix = "studs" }) RunService.RenderStepped:Connect(function() pcall(function() if not Toggles.CustomHandsEnabled or not Toggles.CustomHandsEnabled.Value then return end local xOffset = Options.HandsX and Options.HandsX.Value or 0.2 local yOffset = Options.HandsY and Options.HandsY.Value or -0.155 local zOffset = Options.HandsZ and Options.HandsZ.Value or 0.075 for _, child in ipairs(Camera:GetChildren()) do if child:IsA("Model") then local statsFolder = child:FindFirstChild("Stats") if statsFolder then local defaultVal = statsFolder:FindFirstChild("Default") if defaultVal and defaultVal:IsA("Vector3Value") then defaultVal.Value = Vector3.new(xOffset, yOffset, zOffset) end end end end end) end) -- ========================================================================= -- [ WEAPON CHAMS ] -- ========================================================================= local WeaponChamsBox = Tabs.World:AddRightGroupbox("Weapon Chams", "eye") WeaponChamsBox:AddToggle("WeaponChamsEnabled", { Text = "Enable Weapon Chams", Default = false, }):AddColorPicker("WeaponChamsColor", { Default = Color3.fromRGB(0, 150, 255), Title = "Chams Color", }) WeaponChamsBox:AddDropdown("WeaponChamsMode", { Text = "Chams Material/Type", Values = {"Glass", "ForceField", "Metal", "Highlight", "Neon"}, Default = "Glass", }) WeaponChamsBox:AddSlider("GlassTransparency", { Text = "Glass Transparency", Default = 0.4, Min = 0, Max = 1, Rounding = 2 }) WeaponChamsBox:AddSlider("MetalReflectance", { Text = "Metal Reflectance", Default = 1.0, Min = 0, Max = 1, Rounding = 1 }) local activeNeonHighlights = {} RunService.RenderStepped:Connect(function() pcall(function() local chamsEnabled = Toggles.WeaponChamsEnabled and Toggles.WeaponChamsEnabled.Value local chamsMode = Options.WeaponChamsMode and Options.WeaponChamsMode.Value or "Glass" local chamsColor = Options.WeaponChamsColor and Options.WeaponChamsColor.Value or Color3.fromRGB(0, 150, 255) local weaponModel = nil for _, child in ipairs(Camera:GetChildren()) do if child:IsA("Model") and child.Name ~= "Viewmodel" and not child.Name:lower():find("light") then local w = child:FindFirstChild("Weapon") or child if w:IsA("Model") and w.Name ~= "Viewmodel" and not w.Name:lower():find("light") then weaponModel = w break end end end if not chamsEnabled or not weaponModel then for _, h in pairs(activeNeonHighlights) do if h and h.Parent then h:Destroy() end end activeNeonHighlights = {} if not chamsEnabled or not weaponModel then return end end local currentNeonParts = {} for _, part in ipairs(weaponModel:GetDescendants()) do if part:IsA("BasePart") and part.Name ~= "Hitbox" and part.Name ~= "HumanoidRootPart" then if part.Name == "ViewmodelLight" or part:FindFirstAncestor("ViewmodelLight") or part:FindFirstAncestor("Viewmodel") then continue end pcall(function() if chamsMode == "Highlight" then currentNeonParts[part] = true local h = part:FindFirstChild("WeaponChamsHighlight") if not h then h = Instance.new("Highlight") h.Name = "WeaponChamsHighlight" h.Adornee = part h.Parent = part h.FillTransparency = 0 h.OutlineTransparency = 1 h.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop table.insert(activeNeonHighlights, h) end h.FillColor = chamsColor else local h = part:FindFirstChild("WeaponChamsHighlight") if h then h:Destroy() end if chamsMode ~= "Neon" then for _, v in ipairs(part:GetChildren()) do if v:IsA("SurfaceAppearance") or v:IsA("Texture") or v:IsA("Decal") then v:Destroy() end end end if chamsMode == "Glass" then part.Material = Enum.Material.Glass part.Color = chamsColor part.Transparency = Options.GlassTransparency and Options.GlassTransparency.Value or 0.4 elseif chamsMode == "ForceField" then part.Material = Enum.Material.ForceField part.Color = chamsColor part.Transparency = 0 elseif chamsMode == "Metal" then part.Material = Enum.Material.Metal part.Color = chamsColor part.Reflectance = Options.MetalReflectance and Options.MetalReflectance.Value or 1.0 part.Transparency = 0 elseif chamsMode == "Neon" then part.Material = Enum.Material.Neon part.Color = chamsColor part.Transparency = 0 for _, v in ipairs(part:GetChildren()) do if v:IsA("SurfaceAppearance") or v:IsA("Texture") or v:IsA("Decal") then v:Destroy() end end end end end) end end if chamsMode == "Highlight" then for i = #activeNeonHighlights, 1, -1 do local h = activeNeonHighlights[i] if not h or not h.Parent or not currentNeonParts[h.Adornee] then if h then h:Destroy() end table.remove(activeNeonHighlights, i) end end end end) end) -- ========================================================================= -- [ COMBAT TAB - SPONGY.CC MODE ] -- ========================================================================= local CubeCombatBox = Tabs.Combat:AddLeftGroupbox("Spongy.cc mode", "crosshair") CubeCombatBox:AddToggle("SpongyMainToggle", { Text = "Spongy.cc Mode", Default = false, }):AddKeyPicker("SpongyKeybind", { Text = "Spongy.cc Mode Key", Default = "None", Mode = "Toggle", }) local SpongyDepBox = CubeCombatBox:AddDependencyBox() SpongyDepBox:AddToggle("CubeAimbotEnabled", { Text = "Enable Cube Smart Aimbot", Default = false }) SpongyDepBox:AddToggle("CubeVisibleCheck", { Text = "Enable Visible Check", Default = false }) SpongyDepBox:AddDropdown("CubeHitPart", { Text = "Target Hit Selection", Values = {"Head", "HumanoidRootPart", "UpperTorso", "LowerTorso"}, Default = "Head", }) SpongyDepBox:AddDivider() SpongyDepBox:AddToggle("CubeTriggerbot", { Text = "Enable Triggerbot", Default = false }) SpongyDepBox:AddSlider("CubeTriggerbotDelay", { Text = "Triggerbot Delay", Default = 0.01, Min = 0, Max = 1, Rounding = 3 }) SpongyDepBox:AddDivider() SpongyDepBox:AddToggle("BulletImpactV1Enabled", { Text = "Cube Checker", Default = false, }):AddColorPicker("BulletImpactV1Color", { Default = Color3.fromRGB(255, 0, 0), Title = "Cube Checker Color", }) SpongyDepBox:AddToggle("BulletImpactV1Rainbow", { Text = "Cube Checker Rainbow Mode", Default = false, }) SpongyDepBox:AddSlider("BulletImpactV1Size", { Text = "Impact Size", Default = 1.5, Min = 0.5, Max = 4, Rounding = 1, Suffix = "studs" }) SpongyDepBox:AddSlider("BulletImpactV1Dist", { Text = "Max Ray Distance", Default = 20, Min = 1, Max = 50, Rounding = 0, Suffix = "m" }) SpongyDepBox:AddDivider() SpongyDepBox:AddToggle("ShowTargetPlayer", { Text = "Show Target Player", Default = false }) SpongyDepBox:AddDropdown("ShowTargetMode", { Text = "Target Display Mode", Values = {"Line", "Crosshair"}, Default = "Crosshair", }) SpongyDepBox:AddLabel("Line Color"):AddColorPicker("ShowTargetLineColor", { Default = Color3.fromRGB(0, 255, 255), Title = "Line Color", }) SpongyDepBox:AddLabel("Crosshair Color"):AddColorPicker("ShowTargetCrosshairColor", { Default = Color3.fromRGB(0, 255, 255), Title = "Crosshair Color", }) CubeCombatBox:AddToggle("ShowPenetration", { Text = "Show Penetration", Default = false }) -- ========================================================================= -- [ PENETRATION VISUALIZER ] -- ========================================================================= task.spawn(function() local PenText = Drawing.new("Text") PenText.Visible = false PenText.Center = true PenText.Size = 18 PenText.Font = 2 PenText.Color = Color3.fromRGB(0, 255, 0) PenText.Outline = true local penParams = RaycastParams.new() penParams.FilterType = Enum.RaycastFilterType.Exclude penParams.CollisionGroup = "Bullet" RunService.RenderStepped:Connect(function() local show = Toggles.ShowPenetration and Toggles.ShowPenetration.Value local cam = Workspace.CurrentCamera if show and cam then PenText.Position = Vector2.new(cam.ViewportSize.X / 2, cam.ViewportSize.Y / 2 - 70) local ignore = {LP.Character, cam, Workspace:FindFirstChild("BacktrackChams")} penParams.FilterDescendantsInstances = ignore local res = Workspace:Raycast(cam.CFrame.Position, cam.CFrame.LookVector * 1000, penParams) if res then local stats = GetPenetrationStats(cam.CFrame.Position, cam.CFrame.LookVector, 4, {LP.Character, cam}, nil) if stats.Success then PenText.Visible = true PenText.Text = string.format("WALLBANG: YES\n(%.1f studs)", stats.TotalThickness or 0) PenText.Color = Color3.fromRGB(0, 255, 0) else PenText.Visible = true PenText.Text = "WALLBANG: NO" PenText.Color = Color3.fromRGB(255, 0, 0) end else PenText.Visible = false end else PenText.Visible = false end end) end) SpongyDepBox:SetupDependencies({ {Toggles.SpongyMainToggle, true} }) -- ========================================================================= -- [ HIT SOUND ] -- ========================================================================= local HitSoundBox = Tabs.World:AddLeftGroupbox("Hit Sound", "volume-2") HitSoundBox:AddToggle("HitSoundEnabled", { Text = "Enable Hit Sound", Default = false }) HitSoundBox:AddToggle("CustomHitSoundToggle", { Text = "Enable Custom Hit Sound", Default = false }) HitSoundBox:AddSlider("HitSoundVolume", { Text = "Hit Sound Volume", Default = 1, Min = 0.1, Max = 5, Rounding = 1, Suffix = "x" }) local HitSoundPresets = { ["Neverlose"] = "rbxassetid://139452805868562", ["Skeet"] = "rbxassetid://83717596220569", ["Bell"] = "rbxassetid://96481309571950", ["Bell2"] = "rbxassetid://124010691633262", ["Bubble"] = "rbxassetid://104824514322839", ["Rust"] = "rbxassetid://1255040462", ["Agro1"] = "rbxassetid://132463144859699", ["Agro2"] = "rbxassetid://102651850556408", ["Coins"] = "rbxassetid://5613553529", ["Schaater"] = "rbxassetid://17405655409", ["Pick"] = "rbxassetid://8616930816" } HitSoundBox:AddDropdown("HitSoundPreset", { Text = "Hit Sound Preset", Values = {"Neverlose", "Skeet", "Bell", "Bell2", "Bubble", "Rust", "Agro1", "Agro2", "Coins", "Schaater", "Pick"}, Default = "Neverlose", }) HitSoundBox:AddInput("CustomHitSoundID", { Text = "Custom Sound ID", Default = "", Placeholder = "Clean ID or rbxassetid://...", }) local function PlayHitSound() pcall(function() if not Toggles.HitSoundEnabled.Value then return end local soundId = "" if Toggles.CustomHitSoundToggle and Toggles.CustomHitSoundToggle.Value then local customInput = Options.CustomHitSoundID and Options.CustomHitSoundID.Value if customInput and customInput ~= "" then if not customInput:find("rbxassetid://") then local cleanId = customInput:gsub("%D", "") if cleanId ~= "" then soundId = "rbxassetid://" .. cleanId end else soundId = customInput end end end if soundId == "" then soundId = HitSoundPresets[Options.HitSoundPreset.Value] or "rbxassetid://139452805868562" end local sound = Instance.new("Sound") sound.SoundId = soundId sound.Volume = Options.HitSoundVolume and Options.HitSoundVolume.Value or 1 sound.Parent = SoundService sound:Play() task.spawn(function() sound.Ended:Wait() sound:Destroy() end) end) end -- ========================================================================= -- [ CUSTOM CAMERA ] -- ========================================================================= local CustomCameraBox = Tabs.World:AddRightGroupbox("Custom Camera", "video") CustomCameraBox:AddToggle("CustomFovToggle", { Text = "Custom FOV", Default = false, }):AddKeyPicker("CustomFovKey", { Text = "Custom FOV Key", Default = "One", Mode = "Always" }) CustomCameraBox:AddSlider("FovAmount", { Text = "FOV Amount", Default = 90, Min = 70, Max = 120, Rounding = 0, Suffix = "deg" }) CustomCameraBox:AddToggle("ThirdPerson", { Text = "Third Person Camera", Default = false, Callback = function(Value) if Value then LP.CameraMode = Enum.CameraMode.Classic LP.CameraMaxZoomDistance = Options.ThirdPersonDist and Options.ThirdPersonDist.Value or 10 LP.CameraMinZoomDistance = Options.ThirdPersonDist and Options.ThirdPersonDist.Value or 10 else LP.CameraMode = Enum.CameraMode.LockFirstPerson LP.CameraMaxZoomDistance = 0.5 LP.CameraMinZoomDistance = 0.5 end end }) CustomCameraBox:AddSlider("ThirdPersonDist", { Text = "Third Person Distance", Default = 10, Min = 5, Max = 50, Rounding = 1, Suffix = "studs", Callback = function(Value) if Toggles.ThirdPerson and Toggles.ThirdPerson.Value then LP.CameraMaxZoomDistance = Value LP.CameraMinZoomDistance = Value end end }) -- ========================================================================= -- [ CUSTOM SCOPE ] -- ========================================================================= local CustomScopeBox = Tabs.World:AddRightGroupbox("Custom Scope", "crosshair") CustomScopeBox:AddToggle("CustomScopeFov", { Text = "Custom Scope FOV", Default = false }) CustomScopeBox:AddSlider("ScopeFovValue", { Text = "Scope FOV", Default = 70, Min = 10, Max = 100, Rounding = 1, Suffix = "deg" }) CustomScopeBox:AddToggle("RemoveScope", { Text = "Remove Scope", Default = false }) CustomScopeBox:AddDivider() CustomScopeBox:AddToggle("CustomScopeCrosshair", { Text = "Scope Crosshair", Default = false, }):AddColorPicker("ScopeCrosshairColor", { Default = Color3.fromRGB(255, 255, 255), Title = "Crosshair Color" }) CustomScopeBox:AddSlider("ScopeCrosshairThickness", { Text = "Crosshair Thickness", Default = 2, Min = 1, Max = 10, Rounding = 1, Suffix = "px" }) CustomScopeBox:AddSlider("ScopeCrosshairLengthLR", { Text = "Left & Right Length", Default = 150, Min = 0, Max = 1000, Rounding = 0, Suffix = "px" }) CustomScopeBox:AddSlider("ScopeCrosshairLengthTB", { Text = "Top & Bottom Length", Default = 100, Min = 0, Max = 1000, Rounding = 0, Suffix = "px" }) -- ========================================================================= -- [ HITMARKER ] -- ========================================================================= local HitMarkerBox = Tabs.World:AddLeftGroupbox("HitMarker", "crosshair") HitMarkerBox:AddToggle("HitMarkerEnabled", { Text = "Enable HitMarker", Default = false, }):AddColorPicker("HitMarkerColor", { Default = Color3.fromRGB(255, 255, 255), Title = "HitMarker Color" }) HitMarkerBox:AddToggle("HitMarkerRainbow", { Text = "Rainbow Mode", Default = false }) HitMarkerBox:AddSlider("HitMarkerDuration", { Text = "Display Duration", Default = 2, Min = 0.5, Max = 5, Rounding = 1, Suffix = "s" }) HitMarkerBox:AddSlider("HitMarkerSpinSpeed", { Text = "Spin Speed", Default = 720, Min = 0, Max = 1440, Rounding = 0, Suffix = "deg/s" }) HitMarkerBox:AddSlider("HitMarkerSize", { Text = "Size", Default = 25, Min = 5, Max = 50, Rounding = 0, Suffix = "px" }) HitMarkerBox:AddSlider("HitMarkerThickness", { Text = "Thickness", Default = 2, Min = 1, Max = 6, Rounding = 1, Suffix = "px" }) local TriggerHitMarkerEvent = nil task.spawn(function() local activeHitMarkers = {} TriggerHitMarkerEvent = function(hitPos) if not Toggles.HitMarkerEnabled or not Toggles.HitMarkerEnabled.Value then return end local dur = Options.HitMarkerDuration and Options.HitMarkerDuration.Value or 2 local thick = Options.HitMarkerThickness and Options.HitMarkerThickness.Value or 2 local lines = {} for i = 1, 4 do local line = Drawing.new("Line") line.Thickness = thick line.Transparency = 1 line.Visible = false lines[i] = line end table.insert(activeHitMarkers, { lines = lines, worldPos = hitPos, spawnTick = tick(), expireTick = tick() + dur }) end RunService.RenderStepped:Connect(function() pcall(function() local currentTick = tick() local enabled = Toggles.HitMarkerEnabled and Toggles.HitMarkerEnabled.Value local col = Options.HitMarkerColor and Options.HitMarkerColor.Value or Color3.fromRGB(255, 255, 255) if Toggles.HitMarkerRainbow and Toggles.HitMarkerRainbow.Value then col = Color3.fromHSV((currentTick % 5) / 5, 1, 1) end local baseSize = Options.HitMarkerSize and Options.HitMarkerSize.Value or 25 local spinSpeed = Options.HitMarkerSpinSpeed and Options.HitMarkerSpinSpeed.Value or 720 local pulseFactor = 1 + 0.35 * math.sin(currentTick * math.pi) local currentSize = baseSize * pulseFactor local gap = 6 * pulseFactor for i = #activeHitMarkers, 1, -1 do local data = activeHitMarkers[i] if not enabled or currentTick > data.expireTick then for _, line in ipairs(data.lines) do pcall(function() line:Remove() end) end table.remove(activeHitMarkers, i) else local screenPos, onScreen = Camera:WorldToViewportPoint(data.worldPos) if onScreen then local center = Vector2.new(screenPos.X, screenPos.Y) local lifetime = currentTick - data.spawnTick local currentAngle = math.rad((lifetime * spinSpeed) % 360) local baseAngles = {0, 90, 180, 270} for j = 1, 4 do local line = data.lines[j] line.Color = col line.Thickness = Options.HitMarkerThickness and Options.HitMarkerThickness.Value or 2 local totalAngle = currentAngle + math.rad(baseAngles[j]) local cosA = math.cos(totalAngle) local sinA = math.sin(totalAngle) line.From = center + Vector2.new(cosA * gap, sinA * gap) line.To = center + Vector2.new(cosA * (gap + currentSize), sinA * (gap + currentSize)) line.Visible = true end else for _, line in ipairs(data.lines) do line.Visible = false end end end end end) end) end) -- ========================================================================= -- [ SCOPE CROSSHAIR GUI ] -- ========================================================================= task.spawn(function() local CoreGui = game:GetService("CoreGui") local crosshairGui = Instance.new("ScreenGui") crosshairGui.Name = "BloxStrike_GdcScopeCrosshair" crosshairGui.ResetOnSpawn = false pcall(function() crosshairGui.Parent = CoreGui end) local container = Instance.new("Frame", crosshairGui) container.BackgroundTransparency = 1 container.AnchorPoint = Vector2.new(0.5, 0.5) container.Position = UDim2.new(0.5, 0, 0.5, 0) container.Size = UDim2.new(0, 0, 0, 0) local leftLine = Instance.new("Frame", container) leftLine.AnchorPoint = Vector2.new(1, 0.5) leftLine.BorderSizePixel = 0 local rightLine = Instance.new("Frame", container) rightLine.AnchorPoint = Vector2.new(0, 0.5) rightLine.BorderSizePixel = 0 local topLine = Instance.new("Frame", container) topLine.AnchorPoint = Vector2.new(0.5, 1) topLine.BorderSizePixel = 0 local bottomLine = Instance.new("Frame", container) bottomLine.AnchorPoint = Vector2.new(0.5, 0) bottomLine.BorderSizePixel = 0 RunService.RenderStepped:Connect(function() pcall(function() local isScoped = false local playerGui = LP:FindFirstChild("PlayerGui") if playerGui then local s, scope = pcall(function() return playerGui.MainGui.Gameplay.Middle.SniperScope end) if s and scope and scope.Visible then isScoped = true end end local enabled = Toggles.CustomScopeCrosshair and Toggles.CustomScopeCrosshair.Value and isScoped container.Visible = enabled if enabled then local col = Options.ScopeCrosshairColor and Options.ScopeCrosshairColor.Value or Color3.fromRGB(255, 255, 255) leftLine.BackgroundColor3 = col rightLine.BackgroundColor3 = col topLine.BackgroundColor3 = col bottomLine.BackgroundColor3 = col local t = Options.ScopeCrosshairThickness and Options.ScopeCrosshairThickness.Value or 2 local lenLR = Options.ScopeCrosshairLengthLR and Options.ScopeCrosshairLengthLR.Value or 150 local lenTB = Options.ScopeCrosshairLengthTB and Options.ScopeCrosshairLengthTB.Value or 100 leftLine.Size = UDim2.new(0, lenLR, 0, t) leftLine.Position = UDim2.new(0, 0, 0, 0) rightLine.Size = UDim2.new(0, lenLR, 0, t) rightLine.Position = UDim2.new(0, 0, 0, 0) topLine.Size = UDim2.new(0, t, 0, lenTB) topLine.Position = UDim2.new(0, 0, 0, 0) bottomLine.Size = UDim2.new(0, t, 0, lenTB) bottomLine.Position = UDim2.new(0, 0, 0, 0) end end) end) end) -- ========================================================================= -- [ REMOVE SCOPE ] -- ========================================================================= task.spawn(function() local CachedSniperScope = nil RunService.RenderStepped:Connect(function() if CachedSniperScope and not CachedSniperScope.Parent then CachedSniperScope = nil end if not CachedSniperScope then local playerGui = LP:FindFirstChild("PlayerGui") if playerGui then local s, scope = pcall(function() return playerGui.MainGui.Gameplay.Middle.SniperScope end) if s and scope then CachedSniperScope = scope end end end local scopeFrame = CachedSniperScope if not Toggles.RemoveScope or not Toggles.RemoveScope.Value then if scopeFrame then if scopeFrame.Size ~= UDim2.new(1, 0, 1, 0) then scopeFrame.Size = UDim2.new(1, 0, 1, 0) end end return end if scopeFrame then if scopeFrame.Visible == true then scopeFrame.Size = UDim2.new(0, 0, 0, 0) else if scopeFrame.Size ~= UDim2.new(1, 0, 1, 0) then scopeFrame.Size = UDim2.new(1, 0, 1, 0) end end end end) end) -- ========================================================================= -- [ CUSTOM SCOPE FOV ] -- ========================================================================= task.spawn(function() RunService.RenderStepped:Connect(function() pcall(function() if Toggles.CustomScopeFov and Toggles.CustomScopeFov.Value then local cam = Workspace.CurrentCamera if cam then local playerGui = LP:FindFirstChild("PlayerGui") if playerGui then local scope = playerGui:FindFirstChild("MainGui") and playerGui.MainGui:FindFirstChild("Gameplay") and playerGui.MainGui.Gameplay:FindFirstChild("Middle") and playerGui.MainGui.Gameplay.Middle:FindFirstChild("SniperScope") if scope and scope.Visible and Options.ScopeFovValue then cam.FieldOfView = Options.ScopeFovValue.Value end end end end end) end) end) -- ========================================================================= -- [ METATABLE HOOK FOR THIRD PERSON ] -- ========================================================================= task.spawn(function() if getrawmetatable and setreadonly then local mt = getrawmetatable(game) local oldNewIndex = mt.__newindex setreadonly(mt, false) mt.__newindex = newcclosure(function(self, key, value) if self == LP and Toggles.ThirdPerson and Toggles.ThirdPerson.Value then if key == "CameraMode" then return oldNewIndex(self, key, Enum.CameraMode.Classic) elseif key == "CameraMaxZoomDistance" then return oldNewIndex(self, key, Options.ThirdPersonDist and Options.ThirdPersonDist.Value or 10) elseif key == "CameraMinZoomDistance" then return oldNewIndex(self, key, Options.ThirdPersonDist and Options.ThirdPersonDist.Value or 10) end end return oldNewIndex(self, key, value) end) setreadonly(mt, true) end end) RunService.RenderStepped:Connect(function() pcall(function() if Toggles.CustomFovToggle and Toggles.CustomFovToggle.Value then local keypicker = Options.CustomFovKey local active = true if keypicker and keypicker.Value ~= "Always" and keypicker.Value ~= "One" then active = keypicker:GetState() end if active then local cam = Workspace.CurrentCamera if cam then cam.FieldOfView = Options.FovAmount.Value or 90 end end end if Toggles.ThirdPerson and Toggles.ThirdPerson.Value then local clampedDist = math.clamp(Options.ThirdPersonDist and Options.ThirdPersonDist.Value or 10, 5, 50) LP.CameraMode = Enum.CameraMode.Classic LP.CameraMaxZoomDistance = clampedDist LP.CameraMinZoomDistance = clampedDist end end) end) -- ========================================================================= -- [ SKYBOX SYSTEM ] -- ========================================================================= local skyboxtable = { ["Night"] = { SkyboxBk = "rbxassetid://1514717643", SkyboxDn = "rbxassetid://1514716936", SkyboxFt = "rbxassetid://1514715910", SkyboxLf = "rbxassetid://1514714945", SkyboxRt = "rbxassetid://1514714011", SkyboxUp = "rbxassetid://1514713374" }, ["Ocean Sunset"] = { SkyboxBk = "rbxassetid://17525686840", SkyboxDn = "rbxassetid://17525678473", SkyboxFt = "rbxassetid://17525684686", SkyboxLf = "rbxassetid://17525680663", SkyboxRt = "rbxassetid://17525682665", SkyboxUp = "rbxassetid://17525674545" }, ["My Summer Car"] = { SkyboxBk = "rbxassetid://16648590964", SkyboxDn = "rbxassetid://16648617436", SkyboxFt = "rbxassetid://16648595424", SkyboxLf = "rbxassetid://16648566370", SkyboxRt = "rbxassetid://16648577071", SkyboxUp = "rbxassetid://16648598180" }, ["Standard"] = { SkyboxBk = "http://www.roblox.com/asset/?id=91458024", SkyboxDn = "http://www.roblox.com/asset/?id=91457980", SkyboxFt = "http://www.roblox.com/asset/?id=91458024", SkyboxLf = "http://www.roblox.com/asset/?id=91458024", SkyboxRt = "http://www.roblox.com/asset/?id=91458024", SkyboxUp = "http://www.roblox.com/asset/?id=91458002" }, ["Minecraft"] = { SkyboxBk = "http://www.roblox.com/asset/?id=8735166756", SkyboxDn = "http://www.roblox.com/asset/?id=8735166707", SkyboxFt = "http://www.roblox.com/asset/?id=8735231668", SkyboxLf = "http://www.roblox.com/asset/?id=8735166755", SkyboxRt = "http://www.roblox.com/asset/?id=8735166751", SkyboxUp = "http://www.roblox.com/asset/?id=8735166729" }, ["Spongebob"] = { SkyboxBk = "http://www.roblox.com/asset/?id=277099484", SkyboxDn = "http://www.roblox.com/asset/?id=277099500", SkyboxFt = "http://www.roblox.com/asset/?id=277099554", SkyboxLf = "http://www.roblox.com/asset/?id=277099531", SkyboxRt = "http://www.roblox.com/asset/?id=277099589", SkyboxUp = "http://www.roblox.com/asset/?id=277101591" }, ["Deep Space"] = { SkyboxBk = "http://www.roblox.com/asset/?id=159248188", SkyboxDn = "http://www.roblox.com/asset/?id=159248183", SkyboxFt = "http://www.roblox.com/asset/?id=159248187", SkyboxLf = "http://www.roblox.com/asset/?id=159248173", SkyboxRt = "http://www.roblox.com/asset/?id=159248192", SkyboxUp = "http://www.roblox.com/asset/?id=159248176" }, ["Clouded Sky"] = { SkyboxBk = "http://www.roblox.com/asset/?id=252760981", SkyboxDn = "http://www.roblox.com/asset/?id=252763035", SkyboxFt = "http://www.roblox.com/asset/?id=252761439", SkyboxLf = "http://www.roblox.com/asset/?id=252760980", SkyboxRt = "http://www.roblox.com/asset/?id=252760986", SkyboxUp = "http://www.roblox.com/asset/?id=252762652" }, ["Retro"] = { SkyboxBk = "rbxasset://sky/null_plainsky512_bk.jpg", SkyboxDn = "rbxasset://sky/null_plainsky512_dn.jpg", SkyboxFt = "rbxasset://sky/null_plainsky512_ft.jpg", SkyboxLf = "rbxasset://sky/null_plainsky512_lf.jpg", SkyboxRt = "rbxasset://sky/null_plainsky512_rt.jpg", SkyboxUp = "rbxasset://sky/null_plainsky512_up.jpg" }, ["City"] = { SkyboxBk = "http://www.roblox.com/asset/?id=9134792889", SkyboxDn = "http://www.roblox.com/asset/?id=9134791975", SkyboxFt = "http://www.roblox.com/asset/?id=9134793457", SkyboxLf = "http://www.roblox.com/asset/?id=9134791234", SkyboxRt = "http://www.roblox.com/asset/?id=9134790419", SkyboxUp = "http://www.roblox.com/asset/?id=9134791633" }, ["Purple Nebula"] = { SkyboxBk = "http://www.roblox.com/asset/?id=15983968922", SkyboxDn = "http://www.roblox.com/asset/?id=15983966825", SkyboxFt = "http://www.roblox.com/asset/?id=15983965025", SkyboxLf = "http://www.roblox.com/asset/?id=15983967420", SkyboxRt = "http://www.roblox.com/asset/?id=15983966246", SkyboxUp = "http://www.roblox.com/asset/?id=15983964246" }, ["Pink Sky"] = { SkyboxBk = "http://www.roblox.com/asset/?id=7890140060", SkyboxDn = "http://www.roblox.com/asset/?id=7890140060", SkyboxFt = "http://www.roblox.com/asset/?id=7890140060", SkyboxLf = "http://www.roblox.com/asset/?id=7890140060", SkyboxRt = "http://www.roblox.com/asset/?id=7890140060", SkyboxUp = "http://www.roblox.com/asset/?id=7890140060" } } local skyNames = {} for k, _ in pairs(skyboxtable) do table.insert(skyNames, k) end table.sort(skyNames) local function UpdateSkybox(name) local data = skyboxtable[name] if not data then return end for _, v in pairs(Lighting:GetChildren()) do if v:IsA("Atmosphere") or v:IsA("Clouds") then v:Destroy() end end local sky = Lighting:FindFirstChild("Spongy_Sky") if not sky then for _, v in pairs(Lighting:GetChildren()) do if v:IsA("Sky") then v:Destroy() end end sky = Instance.new("Sky") sky.Name = "Spongy_Sky" sky.Parent = Lighting end sky.SkyboxBk = data.SkyboxBk sky.SkyboxDn = data.SkyboxDn sky.SkyboxFt = data.SkyboxFt sky.SkyboxLf = data.SkyboxLf sky.SkyboxRt = data.SkyboxRt sky.SkyboxUp = data.SkyboxUp sky.SunTextureId = "" sky.MoonTextureId = "" sky.StarCount = 0 end -- ========================================================================= -- [ WEATHER SYSTEM ] -- ========================================================================= local WeatherPart = nil local GroundPart = nil local function UpdateWeather(wType) if WeatherPart then WeatherPart:Destroy() WeatherPart = nil end if GroundPart then GroundPart:Destroy() GroundPart = nil end for _, v in pairs(Workspace:GetChildren()) do if v.Name == "Spongy_RainDrop" then v:Destroy() end end if wType == "None" then return end WeatherPart = Instance.new("Part") WeatherPart.Name = "Spongy_Weather_Sky" WeatherPart.Size = Vector3.new(100, 1, 100) WeatherPart.Transparency = 1 WeatherPart.Anchored = true WeatherPart.CanCollide = false WeatherPart.Parent = Workspace.CurrentCamera local SkyEmitter = Instance.new("ParticleEmitter") SkyEmitter.Parent = WeatherPart SkyEmitter.EmissionDirection = Enum.NormalId.Bottom SkyEmitter.Enabled = true GroundPart = Instance.new("Part") GroundPart.Name = "Spongy_Weather_Ground" GroundPart.Size = Vector3.new(50, 1, 50) GroundPart.Transparency = 1 GroundPart.Anchored = true GroundPart.CanCollide = false GroundPart.Parent = Workspace.CurrentCamera local GroundEmitter = Instance.new("ParticleEmitter") GroundEmitter.Parent = GroundPart GroundEmitter.Enabled = false if wType == "Rain" then SkyEmitter.Texture = "rbxassetid://241868005" SkyEmitter.Rate = 10000 SkyEmitter.Color = ColorSequence.new(Color3.fromRGB(255, 255, 255)) SkyEmitter.LightEmission = 0.2 SkyEmitter.Transparency = NumberSequence.new(0) SkyEmitter.Size = NumberSequence.new(3, 6) SkyEmitter.Lifetime = NumberRange.new(2, 2.5) SkyEmitter.Speed = NumberRange.new(80, 100) SkyEmitter.SpreadAngle = Vector2.new(0, 0) SkyEmitter.Acceleration = Vector3.new(0, -50, 0) SkyEmitter.Orientation = Enum.ParticleOrientation.FacingCamera elseif wType == "Snow" then SkyEmitter.Texture = "rbxassetid://99851851" SkyEmitter.Rate = 200 SkyEmitter.Color = ColorSequence.new(Color3.fromRGB(255, 255, 255)) SkyEmitter.Size = NumberSequence.new(0.25, 0.35) SkyEmitter.Speed = NumberRange.new(30, 30) SkyEmitter.Lifetime = NumberRange.new(5, 10) SkyEmitter.Acceleration = Vector3.new(0, 0, 0) SkyEmitter.SpreadAngle = Vector2.new(50, 50) SkyEmitter.LightEmission = 0.5 SkyEmitter.Rotation = NumberRange.new(0, 0) SkyEmitter.RotSpeed = NumberRange.new(0, 0) elseif wType == "Hell Fire" then SkyEmitter.Texture = "rbxassetid://242205518" SkyEmitter.Rate = 400 SkyEmitter.Color = ColorSequence.new(Color3.fromRGB(255, 100, 0), Color3.fromRGB(150, 0, 0)) SkyEmitter.Size = NumberSequence.new(2, 4) SkyEmitter.Speed = NumberRange.new(40, 60) SkyEmitter.Lifetime = NumberRange.new(2, 3) SkyEmitter.Acceleration = Vector3.new(0, -10, 0) SkyEmitter.RotSpeed = NumberRange.new(50, 100) end end -- ========================================================================= -- [ LIGHTING SYSTEM ] -- ========================================================================= local DefaultLighting = { Ambient = Lighting.Ambient, OutdoorAmbient = Lighting.OutdoorAmbient, Brightness = Lighting.Brightness, ClockTime = Lighting.ClockTime, FogEnd = Lighting.FogEnd, FogStart = Lighting.FogStart, GlobalShadows = Lighting.GlobalShadows } local function UpdateLighting() if Toggles.EnableTime and Toggles.EnableTime.Value then Lighting.ClockTime = Options.WorldClockTime.Value else Lighting.ClockTime = DefaultLighting.ClockTime end if Toggles.EnableBrightness and Toggles.EnableBrightness.Value then Lighting.Brightness = Options.WorldBrightness.Value else Lighting.Brightness = DefaultLighting.Brightness end if Toggles.EnableColors and Toggles.EnableColors.Value then Lighting.Ambient = Options.WorldAmbient.Value Lighting.OutdoorAmbient = Options.WorldOutdoorAmbient.Value else Lighting.Ambient = DefaultLighting.Ambient Lighting.OutdoorAmbient = DefaultLighting.OutdoorAmbient end end WorldBox:AddToggle("EnableSkybox", { Text = "Enable Skybox", Default = false, Callback = function(v) if v then if Toggles.Atmosphere and Toggles.Atmosphere.Value then Toggles.Atmosphere:SetValue(false) end UpdateSkybox(Options.SkyboxPreset.Value) end end }) WorldBox:AddDropdown("SkyboxPreset", { Text = "Skybox Preset", Values = skyNames, Default = "Night", Callback = function(v) if Toggles.EnableSkybox.Value then UpdateSkybox(v) end end }) WorldBox:AddDropdown("WeatherType", { Text = "Weather", Values = {"None", "Rain", "Snow", "Hell Fire"}, Default = "None", Callback = function(v) UpdateWeather(v) end }) WorldBox:AddToggle("EnableTime", { Text = "Enable Time", Default = false, Callback = function(_) UpdateLighting() end }) WorldBox:AddSlider("WorldClockTime", { Text = "Clock Time", Default = 12, Min = 0, Max = 24, Rounding = 1, Suffix = "h", Callback = function(_) UpdateLighting() end }) WorldBox:AddToggle("EnableBrightness", { Text = "Enable Brightness", Default = false, Callback = function(_) UpdateLighting() end }) WorldBox:AddSlider("WorldBrightness", { Text = "Brightness", Default = 2, Min = 0, Max = 10, Rounding = 1, Suffix = "x", Callback = function(_) UpdateLighting() end }) WorldBox:AddToggle("EnableColors", { Text = "Enable Colors", Default = false, Callback = function(_) UpdateLighting() end }) WorldBox:AddLabel("Ambient Color"):AddColorPicker("WorldAmbient", { Default = Color3.fromRGB(127, 127, 127), Title = "Ambient Color", Callback = function(_) UpdateLighting() end }) WorldBox:AddLabel("Outdoor Color"):AddColorPicker("WorldOutdoorAmbient", { Default = Color3.fromRGB(127, 127, 127), Title = "Outdoor Color", Callback = function(_) UpdateLighting() end }) task.spawn(function() while task.wait(1) do pcall(function() if Toggles.EnableSkybox and Toggles.EnableSkybox.Value then UpdateSkybox(Options.SkyboxPreset.Value) end UpdateLighting() end) end end) RunService.RenderStepped:Connect(function() if not Workspace.CurrentCamera then return end local CamCF = Workspace.CurrentCamera.CFrame if WeatherPart then WeatherPart.CFrame = CamCF * CFrame.new(0, 30, 0) end end) -- ========================================================================= -- [ SKIN CHANGER SYSTEM ] -- ========================================================================= local RS = ReplicatedStorage local G = { knifeChangerSupported = true, executor = (identifyexecutor and identifyexecutor()) or "Unknown", inspectWarningShown = false } if string.find(G.executor, "RonixExploit", 1, true) or string.find(G.executor, "Xeno", 1, true) or string.find(G.executor, "Solara", 1, true) then G.knifeChangerSupported = false end local SD = {SkinsRoot = nil, SkinSelections = {}, GloveSelections = {}, GloveFolders = {}} pcall(function() SD.SkinsRoot = RS:FindFirstChild("Assets") and RS.Assets:FindFirstChild("Skins") end) if SD.SkinsRoot then pcall(function() for _, wf in ipairs(SD.SkinsRoot:GetChildren()) do local skins = {} for _, sf in ipairs(wf:GetChildren()) do skins[#skins + 1] = sf.Name end table.sort(skins) SD.SkinSelections[wf.Name] = skins end for _, folder in ipairs(SD.SkinsRoot:GetChildren()) do if (folder.Name:match("Glove") or folder.Name:match("Gloves") or folder.Name == "Hand Wraps") and not (folder.Name:match("T Glove") or folder.Name:match("CT Glove") or folder.Name:match("T Gloves") or folder.Name:match("CT Gloves")) then SD.GloveFolders[#SD.GloveFolders + 1] = folder end end end) end for _, gf in ipairs(SD.GloveFolders) do local skins = {"Default"} for _, skin in ipairs(gf:GetChildren()) do skins[#skins + 1] = skin.Name end SD.GloveSelections[gf.Name] = skins end local Config = { SkinChanger = {Enabled = false, Skins = {}}, KnifeChanger = {Enabled = false, Model = "Skeleton Knife"}, GloveChanger = {Enabled = false, Gloves = {}, Model = "Sports Gloves", Skin = "Default"}, } for w, s in pairs(SD.SkinSelections) do Config.SkinChanger.Skins[w] = s[1] or "Default" end for _, gf in ipairs(SD.GloveFolders) do Config.GloveChanger.Gloves[gf.Name] = "Default" end local Checkifbaseknife = {"CT Knife", "T Knife", "Knife"} local function Checkknife(w) if not w then return false end for _, k in ipairs(Checkifbaseknife) do if w == k then return true end end return false end local SafeRequire = function(module) if not module then return nil end local success, result = pcall(function() return require(module) end) if success and result and type(result) == "table" then return result end return nil end local Router pcall(function() local module = RS:FindFirstChild("Database") and RS.Database:FindFirstChild("Security") and RS.Database.Security:FindFirstChild("Router") if module then Router = SafeRequire(module) end end) local SkinsBox = Tabs.SkinChanger:AddLeftGroupbox("Weapon Skins", "palette") local GlovesBox = Tabs.SkinChanger:AddRightGroupbox("Gloves Changer", "hand") local KnifeBox = Tabs.SkinChanger:AddRightGroupbox("Knife Changer", "sword") SkinsBox:AddToggle("EnableSkins", { Text = "Enable Weapon Skins", Default = false, Callback = function(v) Config.SkinChanger.Enabled = v end }) local KM = {"Karambit", "Butterfly Knife", "Flip Knife", "Gut Knife", "M9 Bayonet", "Skeleton Knife", "Stiletto Knife"} local EW = {"Driver Gloves", "Sports Gloves", "Operator Gloves", "Hand Wraps"} KnifeBox:AddToggle("KnifeChangerToggle", { Text = "Enable Knife Changer", Default = false, Callback = function(v) Config.KnifeChanger.Enabled = v end }) KnifeBox:AddDropdown("KnifeModel", { Text = "Knife Model", Values = KM, Default = "Skeleton Knife", Callback = function(v) Config.KnifeChanger.Model = v end }) for _, kn in ipairs(KM) do local ks = SD.SkinSelections[kn] if ks then KnifeBox:AddDropdown("KnifeSkin_" .. kn, { Text = kn .. " Skin", Values = ks, Default = 1, Callback = function(v) Config.SkinChanger.Skins[kn] = v end }) end end GlovesBox:AddToggle("GloveChangerToggle", { Text = "Enable Gloves Changer", Default = false, Callback = function(v) Config.GloveChanger.Enabled = v end }) local GM = {} for k in pairs(SD.GloveSelections) do GM[#GM + 1] = k end table.sort(GM) GlovesBox:AddDropdown("GloveModel", { Text = "Glove Model", Values = GM, Default = GM[1] or "Sports Gloves", Callback = function(v) Config.GloveChanger.Model = v end }) for _, gFolder in ipairs(SD.GloveFolders) do local gName = gFolder.Name local gSkins = SD.GloveSelections[gName] if gSkins then GlovesBox:AddDropdown("GloveSkin_" .. gName, { Text = gName .. " Skin", Values = gSkins, Default = 1, Callback = function(v) Config.GloveChanger.Gloves[gName] = v end }) end end for w, s in pairs(SD.SkinSelections) do if not table.find(KM, w) and not table.find(GM, w) and not table.find(EW, w) then SkinsBox:AddDropdown("Skin_" .. w, { Text = w, Values = s, Default = 1, Callback = function(v) Config.SkinChanger.Skins[w] = v end }) end end local function InitKnifeChanger() pcall(function() local SM = RS:FindFirstChild("Database") and RS.Database:FindFirstChild("Components") and RS.Database.Components:FindFirstChild("Libraries") and RS.Database.Components.Libraries:FindFirstChild("Skins") local VM = RS:FindFirstChild("Classes") and RS.Classes:FindFirstChild("WeaponComponent") and RS.Classes.WeaponComponent:FindFirstChild("Classes") and RS.Classes.WeaponComponent.Classes:FindFirstChild("Viewmodel") if not SM or not VM then return end local Sk = SafeRequire(SM) local Vm = SafeRequire(VM) if not Sk or not Vm then return end local oGCM = Sk.GetCameraModel Sk.GetCameraModel = function(w, sk, ...) if Config.KnifeChanger.Enabled and w and Checkknife(w) then local newKnife = Config.KnifeChanger.Model local newSkin = Config.SkinChanger.Skins[newKnife] or "Vanilla" local success, result = pcall(oGCM, newKnife, newSkin, ...) if success and result then return result end end local success, result = pcall(oGCM, w, sk, ...) if success then return result end return nil end local oGChM = Sk.GetCharacterModel Sk.GetCharacterModel = function(w, sk, ...) if Config.KnifeChanger.Enabled and w and Checkknife(w) then local newKnife = Config.KnifeChanger.Model local newSkin = Config.SkinChanger.Skins[newKnife] or "Vanilla" local success, result = pcall(oGChM, newKnife, newSkin, ...) if success and result then return result end end local success, result = pcall(oGChM, w, sk, ...) if success then return result end return nil end local oVN = Vm.new Vm.new = function(vc, w, sk, ...) if Config.KnifeChanger.Enabled and w and Checkknife(w) then local newKnife = Config.KnifeChanger.Model local newSkin = Config.SkinChanger.Skins[newKnife] or "Vanilla" local success, result = pcall(oVN, vc, newKnife, newSkin, ...) if success and result then return result end end local success, result = pcall(oVN, vc, w, sk, ...) if success then return result end return nil end if Sk.GetGloves then local oGG = Sk.GetGloves Sk.GetGloves = function(g, sk) if Config.GloveChanger.Enabled and Config.GloveChanger.Model then local gModel = Config.GloveChanger.Model local ts = Config.GloveChanger.Gloves[gModel] or "Default" local success, result = pcall(oGG, gModel, ts) if success and result then return result end end local success, result = pcall(oGG, g, sk) if success then return result end return nil end end end) end if G.knifeChangerSupported then InitKnifeChanger() end local function UpdateInventoryNames() local invGui = LP:FindFirstChild("PlayerGui") and LP.PlayerGui:FindFirstChild("MainGui") if not invGui then return end local gameplay = invGui:FindFirstChild("Gameplay") if not gameplay then return end local bottom = gameplay:FindFirstChild("Bottom") if not bottom then return end local inv = bottom:FindFirstChild("Inventory") if not inv then return end local meleeSlot = inv:FindFirstChild("Melee") if meleeSlot and Config.KnifeChanger.Enabled then local weapon = meleeSlot:FindFirstChild("Weapon") if weapon then local weaponName = weapon:FindFirstChild("WeaponName") if weaponName and weaponName:IsA("TextLabel") then local knifeModel = Config.KnifeChanger.Model local sel = Config.SkinChanger.Skins[knifeModel] local star = utf8.char(9733) if sel and sel ~= "Default" then weaponName.Text = star .. " " .. knifeModel .. " | " .. sel else weaponName.Text = star .. " " .. knifeModel end end end end end local function GetWeaponModel() local cam = Workspace.CurrentCamera if not cam then return nil end for _, ch in pairs(cam:GetChildren()) do if ch:IsA("Model") and ch.Name ~= "Arms" and ch.Name ~= "Arms1" and ch.Name ~= "Arms2" and ch.Name ~= "Viewmodel" then return ch end end return nil end local function ApplySkin() if not SD.SkinsRoot then return end local wm = GetWeaponModel() if not wm then return end local own = wm.Name local ewn = own local ca = false if Checkknife(own) then if Config.KnifeChanger.Enabled then ewn = Config.KnifeChanger.Model ca = true end else if Config.SkinChanger.Enabled then ca = true end end if not ca then return end local sel = Config.SkinChanger.Skins[ewn] if not sel or sel == "Default" then return end local wsf = SD.SkinsRoot:FindFirstChild(ewn) if not wsf then return end local sf = wsf:FindFirstChild(sel) if not sf then return end local cf = sf:FindFirstChild("Camera") if not cf then return end local fn = cf:FindFirstChild("Factory New") if not fn then return end for _, sa in pairs(fn:GetChildren()) do if sa:IsA("SurfaceAppearance") then local pt = wm:FindFirstChild(sa.Name, true) if pt and (pt:IsA("BasePart") or pt:IsA("MeshPart")) then for _, old in pairs(pt:GetChildren()) do if old:IsA("SurfaceAppearance") then old:Destroy() end end sa:Clone().Parent = pt end end end UpdateInventoryNames() end local function ApplyGloves() if not Config.GloveChanger.Enabled then return end local cam = Workspace.CurrentCamera if not cam then return end local am for _, ch in ipairs(cam:GetChildren()) do if ch:IsA("Model") and (ch.Name:match("Arms") or ch:FindFirstChild("Right Arm")) then am = ch break end end if not am then return end local la = am:FindFirstChild("Left Arm") local ra = am:FindFirstChild("Right Arm") if not la or not ra then return end local lg = la:FindFirstChild("Glove") local rg = ra:FindFirstChild("Glove") if not lg or not rg then return end for _, old in pairs(lg:GetChildren()) do if old:IsA("SurfaceAppearance") then old:Destroy() end end for _, old in pairs(rg:GetChildren()) do if old:IsA("SurfaceAppearance") then old:Destroy() end end local selectedModel = Config.GloveChanger.Model if not selectedModel then return end local sel = Config.GloveChanger.Gloves[selectedModel] if not sel or sel == "Default" then return end if not SD.SkinsRoot then return end local gloveSkinFolder = SD.SkinsRoot:FindFirstChild(selectedModel) if not gloveSkinFolder then return end local skinVariant = gloveSkinFolder:FindFirstChild(sel) if not skinVariant then return end local cameraFolder = skinVariant:FindFirstChild("Camera") if not cameraFolder then return end local factoryNew = cameraFolder:FindFirstChild("Factory New") if not factoryNew then return end for _, sa in pairs(factoryNew:GetChildren()) do if sa:IsA("SurfaceAppearance") then sa:Clone().Parent = lg sa:Clone().Parent = rg end end end task.spawn(function() while true do pcall(function() if Config.SkinChanger.Enabled or Config.KnifeChanger.Enabled then ApplySkin() end if Config.GloveChanger.Enabled then ApplyGloves() end end) task.wait(0.5) end end) task.spawn(function() local lastShot = 0 while true do task.wait(0.008) pcall(function() if not (Toggles.Ragebot and Toggles.Ragebot.Value) then return end -- автоподхват оружия если nil или сменили if not Weapon or not pcall(function() return Weapon.IsEquipped end) then if getCurrentEquipped then Weapon = getEquipped() end end if not Weapon then return end if not Weapon.IsEquipped then return end local rounds = pcall(function() return Weapon.Rounds end) and Weapon.Rounds or 0 if rounds <= 0 then return end if not RageTarget or not RageTarget.Parent then return end -- проверка живости цели local char = RageTarget:FindFirstAncestorOfClass("Model") if not char then return end if char:GetAttribute("Dead") or char:GetAttribute("Invincible") then return end local hum = char:FindFirstChildOfClass("Humanoid") if hum and hum.Health <= 0 then return end -- visible check если включён if Toggles.RagebotVisibleCheck and Toggles.RagebotVisibleCheck.Value then local _, onScreen = Camera:WorldToViewportPoint(RageTarget.Position) if not onScreen then return end end -- wall check если включён if Toggles.RagebotWallCheck and Toggles.RagebotWallCheck.Value then if not isVisible(RageTarget) then return end end local delay = Options.RageDelay and Options.RageDelay.Value or 0.02 local now = tick() if now - lastShot < delay then return end lastShot = now Weapon:shoot() end) end end) -- ========================================================================= -- [ WEAPONS TAB ] -- ========================================================================= local WeaponModsBox = Tabs.Weapons:AddLeftGroupbox("Weapon Mods", "wrench") local GernadesBox = Tabs.Weapons:AddRightGroupbox("Gernades", "bomb") GernadesBox:AddToggle("Antiflashbang", { Text = "Enable No Flashbang", Default = false, Disabled = typeof(hookfunction) ~= "function", DisabledTooltip = "This feature is not available on your executor.", }) GernadesBox:AddToggle("Antismoke", { Text = "Enable No Smoke", Default = false, Disabled = typeof(hookfunction) ~= "function", DisabledTooltip = "This feature is not available on your executor.", }) WeaponModsBox:AddToggle("Firerate", { Text = "Enable Firerate Changer", Default = false, Disabled = typeof(hookfunction) ~= "function", DisabledTooltip = "This feature is not available on your executor.", }) WeaponModsBox:AddSlider("FirerateSlider", { Text = "Firerate", Default = 0.01, Min = 0, Max = 1, Rounding = 3 }) WeaponModsBox:AddToggle("NoRecoil", { Text = "Enable No Recoil", Default = false, Disabled = typeof(hookfunction) ~= "function", DisabledTooltip = "This feature is not available on your executor.", }) WeaponModsBox:AddToggle("NoSpread", { Text = "Enable No Spread", Default = false, Disabled = typeof(hookfunction) ~= "function", DisabledTooltip = "This feature is not available on your executor.", }) -- ========================================================================= -- [ COMBAT TAB - BLATANT + RAGE ] -- ========================================================================= local CombatBlatantBox = Tabs.Combat:AddRightGroupbox("Blatant", "zap") local RageBlatantBox = Tabs.Combat:AddRightGroupbox("Rage", "flame") CombatBlatantBox:AddToggle("SilentAim", { Text = "Enable Silent Aim", Default = false, Disabled = typeof(hookfunction) ~= "function", DisabledTooltip = "This feature is not available on your executor.", }) local BlatantDependencyBox = CombatBlatantBox:AddDependencyBox() BlatantDependencyBox:AddToggle("SilentWallbang", { Text = "Wallbang", Default = false }) BlatantDependencyBox:AddToggle("SilentUseFovCircle", { Text = "Use FOV Circle", Default = false, }):AddColorPicker("SilentFovColor", { Default = Color3.fromRGB(255, 0, 0), Title = "Silent FOV Color" }) BlatantDependencyBox:AddSlider("SilentFovCircleRadius", { Text = "FOV Radius", Default = 50, Min = 0, Max = 300, Rounding = 0 }) BlatantDependencyBox:AddDropdown("SilentHitPart", { Text = "Hit Selection", Values = { "HumanoidRootPart", "Head", "LeftLowerArm", "LowerTorso", "RightHand", "RightLowerArm", "LeftFoot", "LeftHand", "RightFoot", "RightLowerLeg", "LeftLowerLeg", "RightUpperArm", "LeftUpperArm", "UpperTorso", "RightUpperLeg", "LeftUpperLeg" }, Default = "Head", Multi = false, }) BlatantDependencyBox:AddToggle("SilentTeamCheck", { Text = "Enable Team Check", Default = true }) BlatantDependencyBox:SetupDependencies({ {Toggles.SilentAim, true} }) RageBlatantBox:AddToggle("Ragebot", { Text = "Enable Ragebot", Default = false, Disabled = typeof(hookfunction) ~= "function", DisabledTooltip = "This feature is not available on your executor.", }) local RageDependencyBox = RageBlatantBox:AddDependencyBox() RageDependencyBox:AddSlider("RageDelay", { Text = "Delay", Default = 0.01, Min = 0, Max = 1, Rounding = 3 }) RageDependencyBox:AddDropdown("RageHitPart", { Text = "Head / Hit Selection", Values = {"Head", "HumanoidRootPart", "UpperTorso", "LowerTorso"}, Default = "Head", }) RageDependencyBox:AddToggle("RagebotVisibleCheck", { Text = "Enable Visible Check", Default = true }) RageDependencyBox:AddToggle("RagebotTeamCheck", { Text = "Enable Team Check", Default = true }) RageDependencyBox:AddToggle("RagebotWallCheck", { Text = "Enable Wall Check", Default = false }) RageDependencyBox:SetupDependencies({ {Toggles.Ragebot, true} }) -- ── PRIORITY TARGET ─────────────────────────────────────────────────────── RageDependencyBox:AddDivider() local priorityTargetName = nil local function refreshPriorityList() local names = {"[ AUTO ]"} for _, p in ipairs(Players:GetPlayers()) do if p ~= LP then local pt = get_player_team(p) local lt = get_player_team(LP) -- если команды не определились — всё равно показываем игрока if pt == nil or lt == nil or pt ~= lt then table.insert(names, p.Name) end end end return names end RageDependencyBox:AddDropdown("RagePriorityTarget", { Text = "Priority Target", Values = refreshPriorityList(), Default = "[ AUTO ]", Callback = function(v) priorityTargetName = (v == "[ AUTO ]") and nil or v end }) RageDependencyBox:AddButton("Refresh List", function() Options.RagePriorityTarget:SetValues(refreshPriorityList()) Options.RagePriorityTarget:SetValue("[ AUTO ]") priorityTargetName = nil end) -- ========================================================================= -- [ VISUALS TAB - ESP SYSTEM ] v5.7 (Attributes Health + HealthBar Gradient) -- ========================================================================= local Workspace = game:GetService("Workspace") local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Camera = Workspace.CurrentCamera local LP = Players.LocalPlayer local VisualsESPBox = Tabs.Visuals:AddLeftGroupbox("ESP", "eye") VisualsESPBox:AddToggle("ESPEnabled", { Text = "ESP Enabled", Default = false }) VisualsESPBox:AddToggle("ESPTeamCheck", { Text = "Team Check", Default = true }) VisualsESPBox:AddDropdown("ESPBoxType", { Text = "Box ESP", Values = {"2D Box","3D Box","Corner Box","Disabled"}, Default = "2D Box", }) VisualsESPBox:AddLabel("Box Color A"):AddColorPicker("ESPBoxColorA", { Default = Color3.fromRGB(255,255,255), Title = "Box Color A" }) VisualsESPBox:AddLabel("Box Color B"):AddColorPicker("ESPBoxColorB", { Default = Color3.fromRGB(0,200,255), Title = "Box Color B" }) VisualsESPBox:AddToggle("ESPBoxFillGradient", { Text = "Fill Gradient", Default = false }) VisualsESPBox:AddLabel("Fill Color "):AddColorPicker("ESPFillColorA", { Default = Color3.fromRGB(255,50,50), Title = "Fill Color A" }) VisualsESPBox:AddLabel("Fill Color "):AddColorPicker("ESPFillColorB", { Default = Color3.fromRGB(50,50,255), Title = "Fill Color B" }) VisualsESPBox:AddToggle("ESPBoxFillRotation", { Text = "Fill Rotation", Default = false }) VisualsESPBox:AddSlider("ESPBoxRotationSpeed", { Text = "Rotation Speed", Min = 0.1, Max = 10, Default = 2, Rounding = 1 }) VisualsESPBox:AddToggle("ESPName", { Text = "Name ESP", Default = false }) VisualsESPBox:AddLabel("Name Color"):AddColorPicker("ESPNameColor", { Default = Color3.new(1,1,1), Title = "Name Color" }) VisualsESPBox:AddToggle("ESPHealth", { Text = "Health Bar", Default = false }) VisualsESPBox:AddLabel("Health Top Color"):AddColorPicker("ESPHealthTopColor", { Default = Color3.fromRGB(0,255,0), Title = "Health Top" }) VisualsESPBox:AddLabel("Health Bottom Color"):AddColorPicker("ESPHealthBottomColor", { Default = Color3.fromRGB(255,0,0), Title = "Health Bottom" }) VisualsESPBox:AddToggle("ESPHealthText", { Text = "Health Text", Default = false }) VisualsESPBox:AddLabel("HP Text Color"):AddColorPicker("ESPHealthTextColor", { Default = Color3.new(1,1,1), Title = "HP Text Color" }) VisualsESPBox:AddToggle("ESPDistance", { Text = "Distance ESP", Default = false }) VisualsESPBox:AddLabel("Distance Color"):AddColorPicker("ESPDistanceColor", { Default = Color3.new(1,1,1), Title = "Distance Color" }) VisualsESPBox:AddToggle("ESPWeapon", { Text = "Show Weapon Name", Default = false }) :AddColorPicker("ESPWeaponColor", { Default = Color3.new(1,1,1), Title = "Weapon Color" }) VisualsESPBox:AddToggle("ESPTracer", { Text = "Tracer ESP", Default = false }) VisualsESPBox:AddLabel("Tracer Color"):AddColorPicker("ESPTracerColor", { Default = Color3.new(1,1,1) }) VisualsESPBox:AddLabel("Tracer Color "):AddColorPicker("ESPTracerColorB", { Default = Color3.fromRGB(255,0,128) }) VisualsESPBox:AddDropdown("ESPTracerOrigin", { Text = "Tracer Origin", Values = {"Bottom","Top","Center","Mouse"}, Default = "Bottom", }) VisualsESPBox:AddToggle("ESPSkeleton", { Text = "Skeleton ESP", Default = false }) VisualsESPBox:AddLabel("Skeleton Color"):AddColorPicker("ESPSkeletonColorA", { Default = Color3.new(1,1,1), Title = "Skel A" }) VisualsESPBox:AddLabel("Skeleton Color "):AddColorPicker("ESPSkeletonColorB", { Default = Color3.fromRGB(0,255,255), Title = "Skel B" }) VisualsESPBox:AddToggle("ESPCircularTarget", { Text = "Circular Target", Default = false }) VisualsESPBox:AddLabel("Circular Target Color"):AddColorPicker("ESPCircularTargetColor", { Default = Color3.fromRGB(255,200,0), Title = "Circular Target Color" }) -- ========================================================================= -- [ VEST DETAILS TEAM CHECK LOGIC ] -- ========================================================================= local function hasVestDetails(character) if not character then return false end local armor = character:FindFirstChild("CharacterArmor") if armor and armor:FindFirstChild("VestDetails") then return true end return false end local function isCharacterAlly(targetChar) if not LP.Character then return false end local myHasVest = hasVestDetails(LP.Character) local targetHasVest = hasVestDetails(targetChar) if not myHasVest then return not targetHasVest else return targetHasVest end end local DEFAULT_ESP_COLOR = Color3.new(1,1,1) getgenv().esplib_get_color = function(character) return DEFAULT_ESP_COLOR end local function lerpColor(a,b,t) return Color3.new(a.R+(b.R-a.R)*t, a.G+(b.G-a.G)*t, a.B+(b.B-a.B)*t) end local _rotAngle = 0 getgenv().esplib = { box = { enabled=false, type="2D", colorA=Color3.new(1,1,1), colorB=Color3.fromRGB(0,200,255), outline=Color3.new(0,0,0), fillGradient=false, fillColorA=Color3.fromRGB(255,50,50), fillColorB=Color3.fromRGB(50,50,255), fillRotation=false, rotationSpeed=2, }, healthbar = { enabled=false, topColor=Color3.fromRGB(0,255,0), bottomColor=Color3.fromRGB(255,0,0) }, healthtext = { enabled=false, color=Color3.new(1,1,1), size=12 }, name = { enabled=false, fill=Color3.new(1,1,1), size=13 }, distance = { enabled=false, color=Color3.new(1,1,1), size=13 }, tracer = { enabled=false, fillA=Color3.new(1,1,1), fillB=Color3.fromRGB(255,0,128), outline=Color3.new(0,0,0), from="bottom" }, skeleton = { enabled=false, colorA=Color3.new(1,1,1), colorB=Color3.fromRGB(0,255,255), thickness=2 }, weapon = { enabled=false, fill=Color3.new(1,1,1), size=13 }, circulartarget = { enabled=false, color=Color3.fromRGB(255,200,0) }, } local esplib = getgenv().esplib local espinstances = {} getgenv().esplib_instances = espinstances local espfunctions = {} local abs = math.abs local huge = math.huge local floor = math.floor local clamp = math.clamp local sin = math.sin local cos = math.cos local pi = math.pi local pi2 = pi * 2 local SKELETON_BONES_R6 = { {"Head","Torso"},{"Torso","Left Arm"},{"Torso","Right Arm"}, {"Torso","Left Leg"},{"Torso","Right Leg"}, } local SKELETON_BONES_R15 = { {"Head","UpperTorso"},{"UpperTorso","LowerTorso"}, {"UpperTorso","LeftUpperArm"},{"LeftUpperArm","LeftLowerArm"},{"LeftLowerArm","LeftHand"}, {"UpperTorso","RightUpperArm"},{"RightUpperArm","RightLowerArm"},{"RightLowerArm","RightHand"}, {"LowerTorso","LeftUpperLeg"},{"LeftUpperLeg","LeftLowerLeg"},{"LeftLowerLeg","LeftFoot"}, {"LowerTorso","RightUpperLeg"},{"RightUpperLeg","RightLowerLeg"},{"RightLowerLeg","RightFoot"}, } local AABB_CORNER_SIGNS = { {0,0,0},{1,0,0},{0,1,0},{1,1,0},{0,0,1},{1,0,1},{0,1,1},{1,1,1}, } local BOX_3D_EDGES = { {1,2},{2,4},{4,3},{3,1},{5,6},{6,8},{8,7},{7,5},{1,5},{2,6},{3,7},{4,8}, } local WorldToViewportPoint = Camera.WorldToViewportPoint local boxCfg = esplib.box local healthCfg = esplib.healthbar local healthTextCfg = esplib.healthtext local nameCfg = esplib.name local distCfg = esplib.distance local tracerCfg = esplib.tracer local skeletonCfg = esplib.skeleton local weaponCfg = esplib.weapon local circularTargetCfg = esplib.circulartarget local BASE_DIST = 20 local BASE_W = 86 local BASE_H = 155 local partHalfExtentCache = setmetatable({},{__mode="k"}) local function get_part_half_extent(part) local c = partHalfExtentCache[part] if not c then local s=part.Size; c={hx=s.X*.5,hy=s.Y*.5,hz=s.Z*.5}; partHalfExtentCache[part]=c end return c.hx,c.hy,c.hz end local function compute_world_aabb(parts) local x0,y0,z0= huge, huge, huge local x1,y1,z1=-huge,-huge,-huge for i=1,#parts do local p=parts[i] local hx,hy,hz=get_part_half_extent(p) local px,py,pz,r00,r01,r02,r10,r11,r12,r20,r21,r22=p.CFrame:GetComponents() local ex=abs(r00)*hx+abs(r01)*hy+abs(r02)*hz local ey=abs(r10)*hx+abs(r11)*hy+abs(r12)*hz local ez=abs(r20)*hx+abs(r21)*hy+abs(r22)*hz if px-exx1 then x1=px+ex end; if py+ey>y1 then y1=py+ey end; if pz+ez>z1 then z1=pz+ez end end if x0==huge then return nil end return x0,y0,z0,x1,y1,z1 end local function project_fixed_box(x0,y0,z0,x1,y1,z1) local cx=(x0+x1)*.5; local cy=(y0+y1)*.5; local cz=(z0+z1)*.5 local sp,vis=WorldToViewportPoint(Camera,Vector3.new(cx,cy,cz)) if not vis and sp.Z <= 0 then return nil,nil,false end local depth=sp.Z if depth<=0 then depth = 0.1 end local scale=BASE_DIST/depth local w=BASE_W*scale local h=BASE_H*scale local sx,sy=sp.X,sp.Y return Vector2.new(sx-w*.5,sy-h*.5), Vector2.new(sx+w*.5,sy+h*.5), true end local function project_aabb_corners_3d(x0,y0,z0,x1,y1,z1) local sc={}; local on=false for i=1,8 do local s=AABB_CORNER_SIGNS[i] local wx=s[1]==0 and x0 or x1; local wy=s[2]==0 and y0 or y1; local wz=s[3]==0 and z0 or z1 local pos,vis=WorldToViewportPoint(Camera,Vector3.new(wx,wy,wz)) sc[i]=Vector2.new(pos.X,pos.Y); if vis then on=true end end return sc,on end local function ensure_character_parts(instance,data) if data.partlist then return data.partlist end local list={}; local idx=setmetatable({},{__mode="k"}) local function add(p) if p:IsA("BasePart") and not idx[p] then list[#list+1]=p; idx[p]=#list local c=p:GetPropertyChangedSignal("Size"):Connect(function() partHalfExtentCache[p]=nil end) data.sizeConns=data.sizeConns or {}; data.sizeConns[p]=c end end local function rem(p) local i=idx[p]; if not i then return end local last=#list; local lp=list[last] list[i]=lp; idx[lp]=i; list[last]=nil; idx[p]=nil if data.sizeConns and data.sizeConns[p] then data.sizeConns[p]:Disconnect(); data.sizeConns[p]=nil end end if instance:IsA("Model") then for _,p in next,instance:GetDescendants() do add(p) end data.partConnAdd=instance.DescendantAdded:Connect(add) data.partConnRemove=instance.DescendantRemoving:Connect(rem) elseif instance:IsA("BasePart") then add(instance) end data.partlist=list; return list end -- ========================================================================= -- [ FILL GRADIENT ] -- ========================================================================= local MAX_FILL_LINES = 400 local function setupFillLines() local lines = {} for i = 1, MAX_FILL_LINES do local l = Drawing.new("Line") l.Thickness = 4.0 l.Transparency = 0.3 l.Visible = false lines[i] = l end return lines end local function drawFillGradient360(fillLines, x, y, w, h, colorA, colorB, angle) local dx = cos(angle) local dy = sin(angle) local cx = x + w * 0.5 local cy = y + h * 0.5 local maxDot = math.max((abs(dx) * w + abs(dy) * h) * 0.5, 1) local targetRows = math.clamp(math.floor(h * 0.8), 15, MAX_FILL_LINES) local rowH = h / targetRows for i = 1, targetRows do local py = y + (i - 0.5) * rowH local dotL = ((x - cx) * dx + (py - cy) * dy) / maxDot local dotR = ((x + w - cx) * dx + (py - cy) * dy) / maxDot local tL = clamp(dotL * 0.5 + 0.5, 0, 1) local tR = clamp(dotR * 0.5 + 0.5, 0, 1) local line = fillLines[i] line.Color = lerpColor(colorA, colorB, (tL + tR) * 0.5) line.Thickness = math.clamp(rowH + 1.5, 2, 8) line.From = Vector2.new(x + 1, py) line.To = Vector2.new(x + w - 1, py) line.Visible = true end for i = targetRows + 1, #fillLines do fillLines[i].Visible = false end end local GRAD_STEPS = 4 local function drawBoxOutlineGradient(box, x, y, w, h, colorA, colorB, rotOff) local grad=box.grad_lines; local idx=0 local sides={{x,y,x+w,y},{x+w,y,x+w,y+h},{x+w,y+h,x,y+h},{x,y+h,x,y}} for si=1,4 do local s=sides[si]; local x1,y1,x2,y2=s[1],s[2],s[3],s[4] for step=0,GRAD_STEPS-1 do idx=idx+1 local tA=step/GRAD_STEPS; local tB=(step+1)/GRAD_STEPS local tMid=(((si-1)/4)+(tA/4)+rotOff)%1 local col=lerpColor(colorA,colorB,tMid) local line=grad[idx] if line then line.From=Vector2.new(x1+(x2-x1)*tA,y1+(y2-y1)*tA) line.To =Vector2.new(x1+(x2-x1)*tB,y1+(y2-y1)*tB) line.Color=col; line.Visible=true end end end for i=idx+1,#grad do grad[i].Visible=false end end local function hideBox(box) box.outline.Visible=false; box.fill.Visible=false for _,l in ipairs(box.grad_lines) do l.Visible=false end for _,l in ipairs(box.fill_grad_lines) do l.Visible=false end for _,l in ipairs(box.corner_fill) do l.Visible=false end for _,l in ipairs(box.corner_outline) do l.Visible=false end for _,l in ipairs(box.box_3d_lines) do l.Visible=false end end -- ========================================================================= -- [ DRAWING FACTORIES ] -- ========================================================================= function espfunctions.add_box(instance) if not instance or (espinstances[instance] and espinstances[instance].box) then return end local function mkLine(th) local l=Drawing.new("Line"); l.Thickness=th; l.Transparency=1; l.Visible=false; return l end local function mkSq(th,f) local s=Drawing.new("Square"); s.Thickness=th; s.Filled=f; s.Transparency=1; s.Visible=false; return s end local box={} box.outline=mkSq(3,false); box.fill=mkSq(1,false) box.grad_lines={}; for i=1,16 do box.grad_lines[i]=mkLine(1) end box.fill_grad_lines = setupFillLines() box.corner_fill={}; box.corner_outline={} for i=1,8 do box.corner_fill[i]=mkLine(1); box.corner_outline[i]=mkLine(3) end box.box_3d_lines={}; for i=1,12 do box.box_3d_lines[i]=mkLine(2) end espinstances[instance]=espinstances[instance] or {} espinstances[instance].box=box end -- Создаем пачку линий для градиента хилтбара (12 сегментов для плавной заливки) local MAX_HP_SEGMENTS = 12 function espfunctions.add_healthbar(instance) if not instance or (espinstances[instance] and espinstances[instance].healthbar) then return end local bg = Drawing.new("Square") bg.Thickness = 1 bg.Filled = true bg.Color = Color3.new(0, 0, 0) bg.Transparency = 0.5 bg.Visible = false local segs = {} for i = 1, MAX_HP_SEGMENTS do local l = Drawing.new("Line") l.Thickness = 3 l.Transparency = 1 l.Visible = false segs[i] = l end espinstances[instance] = espinstances[instance] or {} espinstances[instance].healthbar = { background = bg, segments = segs } end function espfunctions.add_healthtext(instance) if not instance or (espinstances[instance] and espinstances[instance].healthtext) then return end local t = Drawing.new("Text") t.Center = false t.Outline = true t.Font = 1 t.Transparency = 1 t.Visible = false espinstances[instance] = espinstances[instance] or {} espinstances[instance].healthtext = t end function espfunctions.add_name(instance) if not instance or (espinstances[instance] and espinstances[instance].name) then return end local t=Drawing.new("Text"); t.Center=true; t.Outline=true; t.Font=1; t.Transparency=1 espinstances[instance]=espinstances[instance] or {}; espinstances[instance].name=t end function espfunctions.add_distance(instance) if not instance or (espinstances[instance] and espinstances[instance].distance) then return end local t=Drawing.new("Text"); t.Center=true; t.Outline=true; t.Font=1; t.Transparency=1 espinstances[instance]=espinstances[instance] or {}; espinstances[instance].distance=t end function espfunctions.add_tracer(instance) if not instance or (espinstances[instance] and espinstances[instance].tracer) then return end local o=Drawing.new("Line"); o.Thickness=3; o.Transparency=1 local f=Drawing.new("Line"); f.Thickness=1; f.Transparency=1 espinstances[instance]=espinstances[instance] or {}; espinstances[instance].tracer={outline=o,fill=f} end function espfunctions.add_skeleton(instance,options) if not instance or (espinstances[instance] and espinstances[instance].skeleton) then return end options=options or {} local isR15=instance:FindFirstChild("UpperTorso")~=nil local bones=isR15 and SKELETON_BONES_R15 or SKELETON_BONES_R6 local lines={}; local bp={} for i=1,#bones do local l=Drawing.new("Line"); l.Thickness=options.thickness or 2; l.Transparency=1; l.Visible=false; lines[i]=l bp[i]={instance:FindFirstChild(bones[i][1]),instance:FindFirstChild(bones[i][2])} end espinstances[instance]=espinstances[instance] or {} espinstances[instance].skeleton={lines=lines,bone_parts=bp,screenCache={}} end function espfunctions.add_weapon(instance) if not instance or (espinstances[instance] and espinstances[instance].weapon) then return end local t=Drawing.new("Text"); t.Center=true; t.Outline=true; t.Font=1; t.Transparency=1; t.Visible=false espinstances[instance]=espinstances[instance] or {}; espinstances[instance].weapon=t end function espfunctions.add_circulartarget(instance) if not instance or (espinstances[instance] and espinstances[instance].circulartarget) then return end local SEGS=32; local lines={} for i=1,SEGS do local l=Drawing.new("Line"); l.Thickness=1.5; l.Transparency=1; l.Visible=false; lines[i]=l end local TRAIL_SEGS = 25 local trailLines = {} local neonGlowLines = {} for i = 1, TRAIL_SEGS do local l = Drawing.new("Line") l.Thickness = 2.5 l.Transparency = 0.4 l.Visible = false trailLines[i] = l local glow = Drawing.new("Line") glow.Thickness = 5.0 glow.Transparency = 0.15 glow.Visible = false neonGlowLines[i] = glow end espinstances[instance]=espinstances[instance] or {} espinstances[instance].circulartarget={ lines = lines, trailLines = trailLines, neonGlowLines = neonGlowLines, segments = SEGS, alpha = 0, movingUp = true, trailHistory = {} } end local function hide_all(data) if data.box then hideBox(data.box) end if data.healthbar then data.healthbar.background.Visible=false for _,seg in ipairs(data.healthbar.segments) do seg.Visible=false end end if data.healthtext then data.healthtext.Visible=false end if data.name then data.name.Visible=false end if data.distance then data.distance.Visible=false end if data.tracer then data.tracer.outline.Visible=false; data.tracer.fill.Visible=false end if data.skeleton then for _,l in ipairs(data.skeleton.lines) do l.Visible=false end end if data.weapon then data.weapon.Visible=false end if data.circulartarget then for _,l in ipairs(data.circulartarget.lines) do l.Visible=false end for _,l in ipairs(data.circulartarget.trailLines) do l.Visible=false end for _,l in ipairs(data.circulartarget.neonGlowLines) do l.Visible=false end end end local function cleanup_instance(instance,data) pcall(function() if data.box then data.box.outline:Remove(); data.box.fill:Remove() for _,l in next,data.box.grad_lines do l:Remove() end for _,l in next,data.box.fill_grad_lines do l:Remove() end for _,l in next,data.box.corner_fill do l:Remove() end for _,l in next,data.box.corner_outline do l:Remove() end for _,l in next,data.box.box_3d_lines do l:Remove() end end if data.healthbar then data.healthbar.background:Remove() for _,seg in ipairs(data.healthbar.segments) do seg:Remove() end end if data.healthtext then data.healthtext:Remove() end if data.name then data.name:Remove() end if data.distance then data.distance:Remove() end if data.tracer then data.tracer.outline:Remove(); data.tracer.fill:Remove() end if data.skeleton then for _,l in next,data.skeleton.lines do l:Remove() end end if data.weapon then data.weapon:Remove() end if data.circulartarget then for _,l in ipairs(data.circulartarget.lines) do l:Remove() end for _,l in ipairs(data.circulartarget.trailLines) do l:Remove() end for _,l in ipairs(data.circulartarget.neonGlowLines) do l:Remove() end end if data.partConnAdd then data.partConnAdd:Disconnect() end if data.partConnRemove then data.partConnRemove:Disconnect() end if data.sizeConns then for _,c in next,data.sizeConns do c:Disconnect() end end end) end local weaponAttrCache={}; local weaponNameCache={} local function GetWeaponName(player) if not player then return "None" end local attr=player:GetAttribute("CurrentEquipped") if attr~=weaponAttrCache[player] then weaponAttrCache[player]=attr if attr then local ok,dec=pcall(function() return game:GetService("HttpService"):JSONDecode(attr) end) weaponNameCache[player]=(ok and dec and dec.Name) or "None" else weaponNameCache[player]="None" end end return weaponNameCache[player] or "None" end local function get_cached_screen_pos(cache,part) local c=cache[part]; if c then return c[1],c[2] end local pos,vis=WorldToViewportPoint(Camera,part.Position) local sp=Vector2.new(pos.X,pos.Y); cache[part]={sp,vis}; return sp,vis end -- ========================================================================= -- [ RENDER LOOP ] -- ========================================================================= RunService.RenderStepped:Connect(function(dt) if boxCfg.fillRotation then _rotAngle = (_rotAngle + dt * (boxCfg.rotationSpeed or 2)) % pi2 end local camPos = Camera.CFrame.Position local vp = Camera.ViewportSize local teamCheck = Toggles.ESPTeamCheck and Toggles.ESPTeamCheck.Value local rotOff1 = _rotAngle / pi2 for instance,data in next,espinstances do if not instance or not instance.Parent then cleanup_instance(instance,data); espinstances[instance]=nil; continue end if instance == LP.Character then hide_all(data); continue end if instance:IsA("Model") and not instance.PrimaryPart then local head = instance:FindFirstChild("Head") local torso = instance:FindFirstChild("HumanoidRootPart") or instance:FindFirstChild("Torso") or instance:FindFirstChild("UpperTorso") if head then instance.PrimaryPart = head elseif torso then instance.PrimaryPart = torso end end if teamCheck and isCharacterAlly(instance) then hide_all(data); continue end local healthAttr = instance:GetAttribute("Health") local maxHealthAttr = instance:GetAttribute("MaxHealth") or 100 local isDeadAttr = instance:GetAttribute("Dead") if isDeadAttr == true or (healthAttr and healthAttr <= 0) then hide_all(data) continue end local needBox = boxCfg.enabled and data.box ~=nil local needHp = healthCfg.enabled and data.healthbar~=nil local needHpTxt = healthTextCfg.enabled and data.healthtext~=nil local needName = nameCfg.enabled and data.name ~=nil local needDist = distCfg.enabled and data.distance ~=nil local needTracer = tracerCfg.enabled and data.tracer ~=nil local needSkel = skeletonCfg.enabled and data.skeleton ~=nil local needWep = weaponCfg.enabled and data.weapon ~=nil local needCirc = circularTargetCfg.enabled and data.circulartarget ~=nil if data.box and not needBox then hideBox(data.box) end if data.healthbar and not needHp then data.healthbar.background.Visible=false for _,seg in ipairs(data.healthbar.segments) do seg.Visible=false end end if data.healthtext and not needHpTxt then data.healthtext.Visible=false end if data.name and not needName then data.name.Visible=false end if data.distance and not needDist then data.distance.Visible=false end if data.tracer and not needTracer then data.tracer.outline.Visible=false; data.tracer.fill.Visible=false end if data.skeleton and not needSkel then for _,l in ipairs(data.skeleton.lines) do l.Visible=false end end if data.weapon and not needWep then data.weapon.Visible=false end if data.circulartarget then if not needCirc then for _,l in ipairs(data.circulartarget.lines) do l.Visible=false end for _,l in ipairs(data.circulartarget.trailLines) do l.Visible=false end for _,l in ipairs(data.circulartarget.neonGlowLines) do l.Visible=false end end end if not(needBox or needHp or needHpTxt or needName or needDist or needTracer or needSkel or needWep or needCirc) then continue end local parts=ensure_character_parts(instance,data) local min2,max2,onscreen=nil,nil,false local c3d,on3d=nil,false local x0,y0,z0,x1,y1,z1=compute_world_aabb(parts) if x0 then min2,max2,onscreen=project_fixed_box(x0,y0,z0,x1,y1,z1) if needBox and boxCfg.type=="3D" then c3d,on3d=project_aabb_corners_3d(x0,y0,z0,x1,y1,z1) end end -- ── BOX ────────────────────────────────────────────────────────── if data.box then if needBox and onscreen and min2 and max2 then local x,y = min2.X,min2.Y local w = max2.X-min2.X local h = max2.Y-min2.Y local cA = boxCfg.colorA; local cB=boxCfg.colorB local fA = boxCfg.fillColorA; local fB=boxCfg.fillColorB if boxCfg.type=="2D" then if boxCfg.fillGradient then drawFillGradient360(data.box.fill_grad_lines, x, y, w, h, fA, fB, _rotAngle) else for _,l in ipairs(data.box.fill_grad_lines) do l.Visible=false end end drawBoxOutlineGradient(data.box, x, y, w, h, cA, cB, rotOff1) data.box.outline.Visible=false; data.box.fill.Visible=false for _,l in ipairs(data.box.corner_fill) do l.Visible=false end for _,l in ipairs(data.box.corner_outline) do l.Visible=false end for _,l in ipairs(data.box.box_3d_lines) do l.Visible=false end elseif boxCfg.type=="Corner" then for _,l in ipairs(data.box.grad_lines) do l.Visible=false end data.box.outline.Visible=false; data.box.fill.Visible=false if boxCfg.fillGradient then drawFillGradient360(data.box.fill_grad_lines, x, y, w, h, fA, fB, _rotAngle) else for _,l in ipairs(data.box.fill_grad_lines) do l.Visible=false end end local len=math.min(w,h)*.25 local corners={ {Vector2.new(x,y), Vector2.new(x+len,y) }, {Vector2.new(x,y), Vector2.new(x,y+len) }, {Vector2.new(x+w-len,y),Vector2.new(x+w,y) }, {Vector2.new(x+w,y), Vector2.new(x+w,y+len)}, {Vector2.new(x,y+h), Vector2.new(x+len,y+h)}, {Vector2.new(x,y+h-len),Vector2.new(x,y+h) }, {Vector2.new(x+w-len,y+h),Vector2.new(x+w,y+h)}, {Vector2.new(x+w,y+h-len),Vector2.new(x+w,y+h)}, } for i=1,8 do local t=(i-1)/8; local col=lerpColor(cA,cB,t) data.box.corner_outline[i].From=corners[i][1]; data.box.corner_outline[i].To=corners[i][2] data.box.corner_outline[i].Color=boxCfg.outline; data.box.corner_outline[i].Visible=true data.box.corner_fill[i].From=corners[i][1]; data.box.corner_fill[i].To=corners[i][2] data.box.corner_fill[i].Color=col; data.box.corner_fill[i].Visible=true end for _,l in ipairs(data.box.box_3d_lines) do l.Visible=false end elseif boxCfg.type=="3D" then for _,l in ipairs(data.box.fill_grad_lines) do l.Visible=false end for _,l in ipairs(data.box.grad_lines) do l.Visible=false end data.box.outline.Visible=false; data.box.fill.Visible=false for _,l in ipairs(data.box.corner_fill) do l.Visible=false end for _,l in ipairs(data.box.corner_outline) do l.Visible=false end if c3d and #c3d==8 then for i=1,12 do local e=BOX_3D_EDGES[i] data.box.box_3d_lines[i].From=c3d[e[1]]; data.box.box_3d_lines[i].To=c3d[e[2]] data.box.box_3d_lines[i].Color=lerpColor(cA,cB,(i-1)/12) data.box.box_3d_lines[i].Visible=on3d end else for _,l in ipairs(data.box.box_3d_lines) do l.Visible=false end end end else hideBox(data.box) end end -- ── HEALTH BAR (С ГРАДИЕНТОМ ИЗ 2 КОЛОРПИКЕРОВ) ────────────────── if data.healthbar then local bg = data.healthbar.background local segs = data.healthbar.segments if needHp and onscreen and min2 and max2 and healthAttr then local x = min2.X - 6 local y = min2.Y local w = 3 local h = max2.Y - min2.Y local maxHp = maxHealthAttr > 0 and maxHealthAttr or 100 local hpFraction = clamp(healthAttr / maxHp, 0, 1) bg.Position = Vector2.new(x - 1, y - 1) bg.Size = Vector2.new(w + 2, h + 2) bg.Visible = true local barHeight = h * hpFraction local startY = y + (h - barHeight) local activeSegCount = math.clamp(math.floor(MAX_HP_SEGMENTS * hpFraction), 1, MAX_HP_SEGMENTS) local segH = barHeight / activeSegCount for i = 1, MAX_HP_SEGMENTS do local segLine = segs[i] if i <= activeSegCount then local segmentFraction = (i - 0.5) / MAX_HP_SEGMENTS -- Градиент между TopColor и BottomColor segLine.Color = lerpColor(healthCfg.bottomColor, healthCfg.topColor, segmentFraction) local py1 = startY + (i - 1) * segH local py2 = startY + i * segH segLine.From = Vector2.new(x + w * 0.5, py1) segLine.To = Vector2.new(x + w * 0.5, py2) segLine.Thickness = w segLine.Visible = true else segLine.Visible = false end end else bg.Visible = false for _,seg in ipairs(segs) do seg.Visible = false end end end -- ── HEALTH TEXT ────────────────────────────────────────────────── if data.healthtext then if needHpTxt and onscreen and min2 and max2 and healthAttr then local currentHp = math.floor(healthAttr + 0.5) local maxHp = maxHealthAttr > 0 and maxHealthAttr or 100 data.healthtext.Text = tostring(currentHp) data.healthtext.Size = healthTextCfg.size data.healthtext.Color = healthTextCfg.color local textX = max2.X + 4 local textY = min2.Y + (max2.Y - min2.Y) * (1 - (healthAttr / maxHp)) - 4 data.healthtext.Position = Vector2.new(textX, textY) data.healthtext.Visible = true else data.healthtext.Visible = false end end -- ── NAME ───────────────────────────────────────────────────────── if data.name then if needName and onscreen and min2 and max2 then data.name.Text=instance.Name; data.name.Size=nameCfg.size; data.name.Color=nameCfg.fill data.name.Position=Vector2.new((min2.X+max2.X)*.5,min2.Y-15); data.name.Visible=true else data.name.Visible=false end end -- ── DISTANCE ───────────────────────────────────────────────────── if data.distance then if needDist and onscreen and min2 and max2 then local dist=999 if instance:IsA("Model") and instance.PrimaryPart then dist=(camPos-instance.PrimaryPart.Position).Magnitude elseif instance:IsA("BasePart") then dist=(camPos-instance.Position).Magnitude end data.distance.Text=tostring(floor(dist)).."m"; data.distance.Size=distCfg.size data.distance.Color=distCfg.color data.distance.Position=Vector2.new((min2.X+max2.X)*.5,max2.Y+2); data.distance.Visible=true else data.distance.Visible=false end end -- ── WEAPON ─────────────────────────────────────────────────────── if data.weapon then if needWep and onscreen and min2 and max2 then if not data.player then data.player=Players:GetPlayerFromCharacter(instance) end local wn=data.player and GetWeaponName(data.player) or "None" data.weapon.Text="["..wn.."]"; data.weapon.Size=weaponCfg.size or 13 data.weapon.Color=weaponCfg.fill data.weapon.Position=Vector2.new((min2.X+max2.X)*.5,max2.Y+15) data.weapon.Center=true; data.weapon.Visible=true else data.weapon.Visible=false end end -- ── TRACER ─────────────────────────────────────────────────────── if data.tracer then if needTracer and onscreen and min2 and max2 then local from_pos if tracerCfg.from=="mouse" then local ml=UserInputService:GetMouseLocation(); from_pos=Vector2.new(ml.X,ml.Y) elseif tracerCfg.from=="top" then from_pos=Vector2.new(vp.X/2,0) elseif tracerCfg.from=="center" then from_pos=Vector2.new(vp.X/2,vp.Y/2) else from_pos=Vector2.new(vp.X/2,vp.Y) end local to_pos=(min2+max2)/2 local dist=0 if instance:IsA("Model") and instance.PrimaryPart then dist=clamp((camPos-instance.PrimaryPart.Position).Magnitude/200,0,1) end local col=lerpColor(tracerCfg.fillA,tracerCfg.fillB,dist) data.tracer.outline.From=from_pos; data.tracer.outline.To=to_pos; data.tracer.outline.Color=tracerCfg.outline; data.tracer.outline.Visible=true data.tracer.fill.From=from_pos; data.tracer.fill.To=to_pos; data.tracer.fill.Color=col; data.tracer.fill.Visible=true else data.tracer.outline.Visible=false; data.tracer.fill.Visible=false end end -- ── SKELETON ───────────────────────────────────────────────────── if data.skeleton then if needSkel then local bp=data.skeleton.bone_parts; local lines=data.skeleton.lines; local sc=data.skeleton.screenCache for k in next,sc do sc[k]=nil end local anyDrawn = false for i=1,#bp do local pair=bp[i]; local pA,pB=pair[1],pair[2]; local line=lines[i] if pA and pB and pA.Parent and pB.Parent then local posA,vA=get_cached_screen_pos(sc,pA); local posB,vB=get_cached_screen_pos(sc,pB) if vA or vB then line.From=posA; line.To=posB line.Color=lerpColor(skeletonCfg.colorA,skeletonCfg.colorB,(i-1)/#bp) line.Thickness=skeletonCfg.thickness; line.Visible=true anyDrawn = true else line.Visible=false end else line.Visible=false end end if not anyDrawn then for _,l in ipairs(lines) do l.Visible=false end end else for _,l in ipairs(data.skeleton.lines) do l.Visible=false end end end -- ── CIRCULAR TARGET ────────────────────────────────────────────── if data.circulartarget then local ct = data.circulartarget local head = instance:FindFirstChild("Head") local root = instance:IsA("Model") and instance.PrimaryPart or instance:FindFirstChild("HumanoidRootPart") or head if needCirc and head and root then local speed = 2.0 if ct.movingUp then ct.alpha = ct.alpha + dt * speed if ct.alpha >= 1 then ct.alpha = 1; ct.movingUp = false end else ct.alpha = ct.alpha - dt * speed if ct.alpha <= 0 then ct.alpha = 0; ct.movingUp = true end end local footPos = root.Position - Vector3.new(0, (root.Size.Y * 0.8) + 1.2, 0) local headPos = head.Position + Vector3.new(0, 0.3, 0) local currentWorldPos = footPos:Lerp(headPos, ct.alpha) table.insert(ct.trailHistory, 1, currentWorldPos) if #ct.trailHistory > #ct.trailLines then table.remove(ct.trailHistory) end for i = 1, #ct.trailLines do local trailLine = ct.trailLines[i] local glowLine = ct.neonGlowLines[i] local p1 = ct.trailHistory[i] local p2 = ct.trailHistory[i + 1] if p1 and p2 then local s1, v1 = WorldToViewportPoint(Camera, p1) local s2, v2 = WorldToViewportPoint(Camera, p2) if v1 or v2 then local fadeFactor = clamp(1 - (i / #ct.trailLines), 0.05, 1) glowLine.From = Vector2.new(s1.X, s1.Y) glowLine.To = Vector2.new(s2.X, s2.Y) glowLine.Color = circularTargetCfg.color glowLine.Transparency = fadeFactor * 0.35 glowLine.Visible = true trailLine.From = Vector2.new(s1.X, s1.Y) trailLine.To = Vector2.new(s2.X, s2.Y) trailLine.Color = circularTargetCfg.color trailLine.Transparency = fadeFactor * 0.85 trailLine.Visible = true else trailLine.Visible = false; glowLine.Visible = false end else trailLine.Visible = false; glowLine.Visible = false end end local R = 2.2 local SEGS = ct.segments local col = circularTargetCfg.color for i = 1, SEGS do local aA = pi2 * ((i - 1) / SEGS) local aB = pi2 * (i / SEGS) local wA = currentWorldPos + Vector3.new(cos(aA) * R, 0, sin(aA) * R) local wB = currentWorldPos + Vector3.new(cos(aB) * R, 0, sin(aB) * R) local sA, vA = WorldToViewportPoint(Camera, wA) local sB, vB = WorldToViewportPoint(Camera, wB) local line = ct.lines[i] if vA or vB then line.From = Vector2.new(sA.X, sA.Y) line.To = Vector2.new(sB.X, sB.Y) line.Color = col line.Visible = true else line.Visible = false end end else for _,l in ipairs(ct.lines) do l.Visible=false end for _,l in ipairs(ct.trailLines) do l.Visible=false end for _,l in ipairs(ct.neonGlowLines) do l.Visible=false end end end end end) for k,v in next,espfunctions do esplib[k]=v end -- ========================================================================= -- [ SETTINGS SYNC ] -- ========================================================================= local function updateESPSettings() local bt=Options.ESPBoxType.Value if bt=="Disabled" then esplib.box.enabled=false else esplib.box.enabled=Toggles.ESPEnabled.Value; esplib.box.type=bt:gsub(" Box","") end esplib.box.colorA = Options.ESPBoxColorA.Value esplib.box.colorB = Options.ESPBoxColorB.Value esplib.box.fillGradient = Toggles.ESPBoxFillGradient.Value esplib.box.fillColorA = Options.ESPFillColorA.Value esplib.box.fillColorB = Options.ESPFillColorB.Value esplib.box.fillRotation = Toggles.ESPBoxFillRotation.Value esplib.box.rotationSpeed = Options.ESPBoxRotationSpeed.Value esplib.name.enabled = Toggles.ESPEnabled.Value and Toggles.ESPName.Value esplib.name.fill = Options.ESPNameColor.Value esplib.healthbar.enabled = Toggles.ESPEnabled.Value and Toggles.ESPHealth.Value esplib.healthbar.topColor = Options.ESPHealthTopColor.Value esplib.healthbar.bottomColor = Options.ESPHealthBottomColor.Value esplib.healthtext.enabled = Toggles.ESPEnabled.Value and Toggles.ESPHealthText.Value esplib.healthtext.color = Options.ESPHealthTextColor.Value esplib.distance.enabled = Toggles.ESPEnabled.Value and Toggles.ESPDistance.Value esplib.distance.color = Options.ESPDistanceColor.Value esplib.tracer.enabled = Toggles.ESPEnabled.Value and Toggles.ESPTracer.Value esplib.tracer.fillA = Options.ESPTracerColor.Value esplib.tracer.fillB = Options.ESPTracerColorB.Value esplib.tracer.from = Options.ESPTracerOrigin.Value:lower() esplib.skeleton.enabled = Toggles.ESPEnabled.Value and Toggles.ESPSkeleton.Value esplib.skeleton.colorA = Options.ESPSkeletonColorA.Value esplib.skeleton.colorB = Options.ESPSkeletonColorB.Value esplib.weapon.enabled = Toggles.ESPEnabled.Value and Toggles.ESPWeapon.Value esplib.weapon.fill = Options.ESPWeaponColor and Options.ESPWeaponColor.Value or Color3.new(1,1,1) esplib.circulartarget.enabled = Toggles.ESPEnabled.Value and Toggles.ESPCircularTarget.Value esplib.circulartarget.color = Options.ESPCircularTargetColor.Value end -- ========================================================================= -- [ DYNAMIC CHARACTERS FOLDER SCANNER ] -- ========================================================================= local espCharacters={} local function addEspToCharacter(character) if not character or espCharacters[character] then return end if character == LP.Character then return end esplib.add_box(character) esplib.add_name(character) esplib.add_healthbar(character) esplib.add_healthtext(character) esplib.add_distance(character) esplib.add_tracer(character) esplib.add_skeleton(character, {thickness=2}) esplib.add_weapon(character) esplib.add_circulartarget(character) espCharacters[character]=true end local function removeEspFromCharacter(character) if character then if espinstances[character] then cleanup_instance(character, espinstances[character]) espinstances[character] = nil end espCharacters[character]=nil end end local charactersFolder = Workspace:WaitForChild("Characters", 5) local function scanCharactersFolder() if not charactersFolder then return end local function processContainer(container) for _, child in ipairs(container:GetChildren()) do if child:IsA("Model") then if child:GetAttribute("Health") ~= nil or child:FindFirstChild("Head") then addEspToCharacter(child) end processContainer(child) end end end processContainer(charactersFolder) end scanCharactersFolder() if charactersFolder then charactersFolder.DescendantAdded:Connect(function(descendant) if descendant:IsA("Model") then task.wait(0.1) if descendant:GetAttribute("Health") ~= nil or descendant:FindFirstChild("Head") then addEspToCharacter(descendant) end end end) charactersFolder.DescendantRemoving:Connect(function(descendant) if descendant:IsA("Model") then removeEspFromCharacter(descendant) end end) end local function refreshAllCharacters() for c in next,espCharacters do removeEspFromCharacter(c) end scanCharactersFolder() end local function onChange() updateESPSettings(); refreshAllCharacters() end Toggles.ESPEnabled:OnChanged(onChange); Toggles.ESPTeamCheck:OnChanged(onChange) Options.ESPBoxType:OnChanged(updateESPSettings) Options.ESPBoxColorA:OnChanged(updateESPSettings); Options.ESPBoxColorB:OnChanged(updateESPSettings) Toggles.ESPBoxFillGradient:OnChanged(updateESPSettings) Options.ESPFillColorA:OnChanged(updateESPSettings); Options.ESPFillColorB:OnChanged(updateESPSettings) Toggles.ESPBoxFillRotation:OnChanged(updateESPSettings); Options.ESPBoxRotationSpeed:OnChanged(updateESPSettings) Toggles.ESPName:OnChanged(updateESPSettings); Options.ESPNameColor:OnChanged(updateESPSettings) Toggles.ESPHealth:OnChanged(updateESPSettings) Options.ESPHealthTopColor:OnChanged(updateESPSettings); Options.ESPHealthBottomColor:OnChanged(updateESPSettings) Toggles.ESPHealthText:OnChanged(updateESPSettings) Options.ESPHealthTextColor:OnChanged(updateESPSettings) Toggles.ESPDistance:OnChanged(updateESPSettings) Options.ESPDistanceColor:OnChanged(updateESPSettings) Toggles.ESPTracer:OnChanged(updateESPSettings) Options.ESPTracerColor:OnChanged(updateESPSettings); Options.ESPTracerColorB:OnChanged(updateESPSettings) Options.ESPTracerOrigin:OnChanged(updateESPSettings) Toggles.ESPSkeleton:OnChanged(updateESPSettings) Options.ESPSkeletonColorA:OnChanged(updateESPSettings); Options.ESPSkeletonColorB:OnChanged(updateESPSettings) Toggles.ESPWeapon:OnChanged(updateESPSettings) if Options.ESPWeaponColor then Options.ESPWeaponColor:OnChanged(updateESPSettings) end Toggles.ESPCircularTarget:OnChanged(updateESPSettings); Options.ESPCircularTargetColor:OnChanged(updateESPSettings) updateESPSettings() Players.PlayerRemoving:Connect(function(p) if priorityTargetName and p.Name == priorityTargetName then priorityTargetName = nil pcall(function() Options.RagePriorityTarget:SetValues(refreshPriorityList()) Options.RagePriorityTarget:SetValue("[ AUTO ]") end) end end) -- ========================================================================= -- [ FOV CIRCLES ] -- ========================================================================= local SilentFovCircle = Drawing.new("Circle") SilentFovCircle.NumSides = 128 SilentFovCircle.Thickness = 1 SilentFovCircle.Filled = false SilentFovCircle.Visible = false local AimbotFovCircle = Drawing.new("Circle") AimbotFovCircle.NumSides = 128 AimbotFovCircle.Thickness = 1 AimbotFovCircle.Filled = false AimbotFovCircle.Visible = false task.spawn(function() while task.wait(5) do pcall(function() if not SilentFovCircle or not pcall(function() return SilentFovCircle.Visible end) then SilentFovCircle = Drawing.new("Circle") SilentFovCircle.NumSides = 128 SilentFovCircle.Thickness = 1 SilentFovCircle.Filled = false end if not AimbotFovCircle or not pcall(function() return AimbotFovCircle.Visible end) then AimbotFovCircle = Drawing.new("Circle") AimbotFovCircle.NumSides = 128 AimbotFovCircle.Thickness = 1 AimbotFovCircle.Filled = false end end) end end) -- ========================================================================= -- [ TARGET SYSTEM ] -- ========================================================================= local SilentTarget = nil local AimbotTarget = nil local RageTarget = nil local CubeSmartTarget = nil local lockedTargetInstance = nil local rayParams = RaycastParams.new() rayParams.FilterType = Enum.RaycastFilterType.Exclude rayParams.IgnoreWater = true local frameCounter = 0 local function isVisible(target) local ignoreList = {LP.Character} local myTeam = get_player_team(LP) for _, p in ipairs(Players:GetPlayers()) do if p ~= LP and get_player_team(p) == myTeam and p.Character then table.insert(ignoreList, p.Character) end end rayParams.FilterDescendantsInstances = ignoreList local origin = Workspace.CurrentCamera.CFrame.Position local direction = target.Position - origin local result = Workspace:Raycast(origin, direction, rayParams) if result then local hitModel = result.Instance:FindFirstAncestorOfClass("Model") local hitPlayer = Players:GetPlayerFromCharacter(hitModel) if hitPlayer and hitPlayer.Character == target.Parent then return true end return false end return true end local function getSpongyActive() local spongyActive = Toggles.SpongyMainToggle and Toggles.SpongyMainToggle.Value if Options.SpongyKeybind then local kState = Options.SpongyKeybind:GetState() if Options.SpongyKeybind.Value ~= "None" and Options.SpongyKeybind.Value ~= "Always" and Options.SpongyKeybind.Value ~= "Toggle" then spongyActive = kState end end return spongyActive end local function isEnemy(char) if not char then return false end local lchar = LP.Character if not lchar then return false end local myHasVest = hasVestDetails(lchar) local targetHasVest = hasVestDetails(char) if myHasVest then return not targetHasVest else return targetHasVest end end local function FindAllTargets() local camera = Workspace.CurrentCamera local lchar = LP.Character if not lchar then return end local myTeam = get_player_team(LP) local screenCenter = camera.ViewportSize / 2 local sDist, sClose = math.huge, nil local rDist, rClose = math.huge, nil local cDist, cClose = math.huge, nil local spongyActive = getSpongyActive() -- Сканируем Workspace.Characters напрямую local charsFolder = Workspace:FindFirstChild("Characters") if not charsFolder then return end local allChars = {} for _, obj in ipairs(charsFolder:GetDescendants()) do if obj:IsA("Model") then local head = obj:FindFirstChild("Head") local root = obj:FindFirstChild("HumanoidRootPart") if (head or root) and obj ~= lchar then -- Проверяем что не мёртв local isDead = obj:GetAttribute("Dead") or obj:GetAttribute("Invincible") local hp = obj:GetAttribute("Health") if not isDead and (hp == nil or hp > 0) then table.insert(allChars, obj) end end end end -- Определяем союзник или нет через VestDetails local function isEnemy(char) if not char then return false end -- Союзники имеют тот же VestDetails статус что и LP local myHasVest = hasVestDetails(lchar) local targetHasVest = hasVestDetails(char) if myHasVest then return not targetHasVest -- у нас жилет → враги без жилета else return targetHasVest -- у нас нет жилета → враги с жилетом end end -- Spongy.cc cube target if spongyActive then local chosenPartName = Options.CubeHitPart.Value or "Head" -- Проверяем locked target if lockedTargetInstance and lockedTargetInstance.Parent then local charModel = lockedTargetInstance.Parent local isDead = charModel:GetAttribute("Dead") or charModel:GetAttribute("Invincible") local hp = charModel:GetAttribute("Health") if isDead or (hp and hp <= 0) then lockedTargetInstance = nil elseif Toggles.CubeVisibleCheck and Toggles.CubeVisibleCheck.Value then if not isVisible(lockedTargetInstance) then lockedTargetInstance = nil end end else lockedTargetInstance = nil end local bestTarget = lockedTargetInstance local bestDist = math.huge if lockedTargetInstance then local bp = lockedTargetInstance.Parent:FindFirstChild(chosenPartName) or lockedTargetInstance if bp then bestDist = (camera.CFrame.Position - bp.Position).Magnitude end end for _, char in ipairs(allChars) do if not isEnemy(char) then continue end local targetPart = char:FindFirstChild(chosenPartName) or char:FindFirstChild("Head") or char:FindFirstChild("HumanoidRootPart") if not targetPart then continue end local passVis = true if Toggles.CubeVisibleCheck and Toggles.CubeVisibleCheck.Value then if not isVisible(targetPart) then passVis = false end end if passVis then local dist = (camera.CFrame.Position - targetPart.Position).Magnitude if dist < bestDist then bestDist = dist bestTarget = targetPart end end end lockedTargetInstance = bestTarget cClose = bestTarget else lockedTargetInstance = nil end -- Ragebot + Silent Aim for _, char in ipairs(allChars) do if not isEnemy(char) then continue end -- RAGEBOT if Toggles.Ragebot and Toggles.Ragebot.Value then local rPart = char:FindFirstChild(Options.RageHitPart.Value) or char:FindFirstChild("Head") or char:FindFirstChild("HumanoidRootPart") if rPart then local _, rOnScreen = camera:WorldToViewportPoint(rPart.Position) local alive = true if Toggles.RagebotVisibleCheck and Toggles.RagebotVisibleCheck.Value and not rOnScreen then alive = false end if alive and Toggles.RagebotWallCheck and Toggles.RagebotWallCheck.Value then if not isVisible(rPart) then alive = false end end if alive then local rd = (camera.CFrame.Position - rPart.Position).Magnitude local p = Players:GetPlayerFromCharacter(char) if priorityTargetName and p and p.Name == priorityTargetName then -- приоритетный игрок — форсируем rClose = rPart rDist = 0 else -- обычный — только если приоритетный ещё не найден if rd < rDist and rDist > 0 then rDist = rd rClose = rPart end end end end end -- SILENT AIM if Toggles.SilentAim and Toggles.SilentAim.Value then local silentPartName = Options.SilentHitPart and Options.SilentHitPart.Value or "Head" local sPart = char:FindFirstChild(silentPartName) or char:FindFirstChild("Head") or char:FindFirstChild("HumanoidRootPart") if sPart then local sScreenPos, sOnScreen = camera:WorldToViewportPoint(sPart.Position) if sOnScreen then local sd = (Vector2.new(sScreenPos.X, sScreenPos.Y) - screenCenter).Magnitude local maxRadius = (Toggles.SilentUseFovCircle and Toggles.SilentUseFovCircle.Value) and (Options.SilentFovCircleRadius and Options.SilentFovCircleRadius.Value or 50) or 999999 if sd <= maxRadius then local wallOk = (Toggles.SilentWallbang and Toggles.SilentWallbang.Value) or isVisible(sPart) if wallOk and sd < sDist then sDist = sd; sClose = sPart end end end end end end SilentTarget = sClose RageTarget = rClose CubeSmartTarget = cClose end -- ========================================================================= -- [ SHOW TARGET SYSTEM ] -- ========================================================================= local ShowTargetHitMarkerLines = {} for i = 1, 4 do local l = Drawing.new("Line") l.Thickness = 2 l.Transparency = 1 l.Visible = false ShowTargetHitMarkerLines[i] = l end local ShowTargetConnectorLine = Drawing.new("Line") ShowTargetConnectorLine.Thickness = 1.5 ShowTargetConnectorLine.Transparency = 1 ShowTargetConnectorLine.Visible = false RunService.RenderStepped:Connect(function() pcall(function() local cam = Workspace.CurrentCamera local spongyActive = getSpongyActive() local showTargetEnabled = spongyActive and (Toggles.ShowTargetPlayer and Toggles.ShowTargetPlayer.Value) local targetMode = Options.ShowTargetMode and Options.ShowTargetMode.Value or "Crosshair" local absoluteClosestPart = nil local minAbsoluteDist = math.huge local myTeam = get_player_team(LP) local chosenPartName = Options.CubeHitPart and Options.CubeHitPart.Value or "Head" if showTargetEnabled then for _, v in ipairs(Players:GetPlayers()) do if v ~= LP then local char = v.Character if char then local hum = char:FindFirstChildOfClass("Humanoid") local isDead = char:GetAttribute("Dead") or char:GetAttribute("Invincible") or (hum and hum.Health <= 0) if not isDead then local vTeam = get_player_team(v) if myTeam ~= vTeam then local pPart = char:FindFirstChild(chosenPartName) or char:FindFirstChild("Head") or char:FindFirstChild("HumanoidRootPart") if pPart then local dist = (cam.CFrame.Position - pPart.Position).Magnitude if dist < minAbsoluteDist then minAbsoluteDist = dist absoluteClosestPart = pPart end end end end end end end end local lineVisible = false local crosshairVisible = false if showTargetEnabled and absoluteClosestPart and absoluteClosestPart.Parent then local screenPos, onScreen = cam:WorldToViewportPoint(absoluteClosestPart.Position) local center = Vector2.new(screenPos.X, screenPos.Y) local currentTick = tick() if targetMode == "Crosshair" then local crossCol = Options.ShowTargetCrosshairColor and Options.ShowTargetCrosshairColor.Value or Color3.fromRGB(0, 255, 255) local pulseFactor = 1 + 0.3 * math.sin(currentTick * math.pi * 2) local baseSize = 16 * pulseFactor local gap = 5 * pulseFactor local spinAngle = math.rad((currentTick * 180) % 360) local baseAngles = {0, math.pi/2, math.pi, (3*math.pi)/2} for j = 1, 4 do local line = ShowTargetHitMarkerLines[j] line.Color = crossCol line.Thickness = 2 local totalAngle = spinAngle + baseAngles[j] local cosA = math.cos(totalAngle) local sinA = math.sin(totalAngle) line.From = center + Vector2.new(cosA * gap, sinA * gap) line.To = center + Vector2.new(cosA * (gap + baseSize), sinA * (gap + baseSize)) line.Visible = true end crosshairVisible = true elseif targetMode == "Line" then local lineCol = Options.ShowTargetLineColor and Options.ShowTargetLineColor.Value or Color3.fromRGB(0, 255, 255) local viewportCenter = cam.ViewportSize / 2 ShowTargetConnectorLine.From = viewportCenter ShowTargetConnectorLine.To = center ShowTargetConnectorLine.Color = lineCol ShowTargetConnectorLine.Visible = true lineVisible = true end end if not crosshairVisible then for j = 1, 4 do ShowTargetHitMarkerLines[j].Visible = false end end if not lineVisible then ShowTargetConnectorLine.Visible = false end if not showTargetEnabled then for j = 1, 4 do ShowTargetHitMarkerLines[j].Visible = false end ShowTargetConnectorLine.Visible = false end end) end) -- ========================================================================= -- [ MAIN RENDER LOOP ] -- ========================================================================= RunService.RenderStepped:Connect(function() frameCounter = frameCounter + 1 local cam = Workspace.CurrentCamera local viewportCenter = cam.ViewportSize / 2 pcall(function() SilentFovCircle.Position = viewportCenter SilentFovCircle.Radius = Options.SilentFovCircleRadius and Options.SilentFovCircleRadius.Value or 50 SilentFovCircle.Color = Options.SilentFovColor and Options.SilentFovColor.Value or Color3.fromRGB(255, 0, 0) SilentFovCircle.Visible = Toggles.SilentAim and Toggles.SilentAim.Value and Toggles.SilentUseFovCircle and Toggles.SilentUseFovCircle.Value AimbotFovCircle.Position = viewportCenter AimbotFovCircle.Radius = Options.AimbotFovCircleRadius and Options.AimbotFovCircleRadius.Value or 50 AimbotFovCircle.Color = Options.AimbotFovColor and Options.AimbotFovColor.Value or Color3.fromRGB(0, 255, 0) AimbotFovCircle.Visible = Toggles.Aimbot and Toggles.Aimbot.Value and Toggles.AimbotUseFovCircle and Toggles.AimbotUseFovCircle.Value end) if frameCounter % 2 == 0 then FindAllTargets() end local spongyActive = getSpongyActive() local targetToPull = nil if spongyActive and CubeSmartTarget then targetToPull = CubeSmartTarget end if targetToPull and targetToPull.Parent then pcall(function() cam.CFrame = CFrame.new(cam.CFrame.Position, targetToPull.Position) end) end end) -- ========================================================================= -- [ CUBE CHECKER - RAINBOW MODE ] -- ========================================================================= local BulletImpactV1Part = Instance.new("Part") BulletImpactV1Part.Name = "CubeChecker_Physical" BulletImpactV1Part.Size = Vector3.new(1.5, 1.5, 0.01) BulletImpactV1Part.Anchored = true BulletImpactV1Part.CanCollide = false BulletImpactV1Part.CanQuery = false BulletImpactV1Part.CanTouch = false BulletImpactV1Part.Material = Enum.Material.Neon BulletImpactV1Part.Transparency = 0.98 BulletImpactV1Part.Parent = Workspace local selectionBox = Instance.new("SelectionBox") selectionBox.Adornee = BulletImpactV1Part selectionBox.Color3 = Color3.fromRGB(255, 0, 0) selectionBox.LineThickness = 0.04 selectionBox.Transparency = 0.2 selectionBox.Parent = BulletImpactV1Part local impactRayParams = RaycastParams.new() impactRayParams.FilterType = Enum.RaycastFilterType.Exclude impactRayParams.IgnoreWater = true RunService.RenderStepped:Connect(function() pcall(function() local cam = Workspace.CurrentCamera if not cam then return end local spongyActive = getSpongyActive() local enabled = spongyActive and (Toggles.BulletImpactV1Enabled and Toggles.BulletImpactV1Enabled.Value) BulletImpactV1Part.Parent = enabled and Workspace or nil if enabled then local sizeVal = Options.BulletImpactV1Size and Options.BulletImpactV1Size.Value or 1.5 local maxDist = Options.BulletImpactV1Dist and Options.BulletImpactV1Dist.Value or 20 BulletImpactV1Part.Size = Vector3.new(sizeVal, sizeVal, 0.01) local userColor = Options.BulletImpactV1Color and Options.BulletImpactV1Color.Value or Color3.fromRGB(255, 0, 0) if Toggles.BulletImpactV1Rainbow and Toggles.BulletImpactV1Rainbow.Value then local hue = (tick() % 5) / 5 userColor = Color3.fromHSV(hue, 1, 1) end local origin = cam.CFrame.Position local direction = cam.CFrame.LookVector * maxDist impactRayParams.FilterDescendantsInstances = {LP.Character, BulletImpactV1Part} local result = Workspace:Raycast(origin, direction, impactRayParams) if result then BulletImpactV1Part.Parent = Workspace BulletImpactV1Part.CFrame = CFrame.lookAt(result.Position + (result.Normal * 0.02), result.Position + result.Normal) if CubeSmartTarget and spongyActive and Toggles.CubeAimbotEnabled.Value then BulletImpactV1Part.Color = Color3.fromRGB(0, 255, 0) selectionBox.Color3 = Color3.fromRGB(0, 255, 0) else BulletImpactV1Part.Color = userColor selectionBox.Color3 = userColor end else BulletImpactV1Part.Parent = nil end end end) end) -- ========================================================================= -- [ GC HOOKS ] -- ========================================================================= local original = {} local firerateobjs = {} local SendFunc = nil local getCurrentEquipped = nil pcall(function() for _, obj in next, getgc(true) do if type(obj) == "table" and rawget(obj, "FireRate") then pcall(function() table.insert(original, table.clone(obj)) table.insert(firerateobjs, obj) end) end if type(obj) == "table" and rawget(obj, "setWeaponRecoil") then pcall(function() local oldSetWeaponRecoil oldSetWeaponRecoil = hookfunction(obj.setWeaponRecoil, function(...) if Toggles.NoRecoil.Value then return end return oldSetWeaponRecoil(...) end) end) end if type(obj) == "function" and debug.getinfo(obj).name == "calculateRecoilOffset" then pcall(function() local calculateRecoilOffset calculateRecoilOffset = hookfunction(obj, function(...) if Toggles.NoRecoil.Value then return UDim2.new() end return calculateRecoilOffset(...) end) end) end if type(obj) == "table" and rawget(obj, "weaponKick") then pcall(function() local oldweaponkick oldweaponkick = hookfunction(obj.weaponKick, function(p1, p2) if Toggles.NoRecoil.Value then return end return oldweaponkick(p1, p2) end) end) end if type(obj) == "table" and rawget(obj, "getTrueSpread") then pcall(function() local oldgettruespread oldgettruespread = hookfunction(obj.getTrueSpread, function(p1) if Toggles.NoSpread.Value then return 0 end return oldgettruespread(p1) end) end) end if type(obj) == "function" and debug.getinfo(obj).name == "Flash" then pcall(function() local oldflash oldflash = hookfunction(obj, function(...) if Toggles.Antiflashbang.Value then return end return oldflash(...) end) end) end if type(obj) == "function" and debug.getinfo(obj).name == "CreateVoxel" and debug.getupvalue(obj, 1) and tostring(debug.getupvalue(obj, 1)) == "Smoke" then pcall(function() local oldsmoke oldsmoke = hookfunction(obj, function(...) if Toggles.Antismoke.Value then return end return oldsmoke(...) end) end) end if type(obj) == "table" and rawget(obj, "shoot") and typeof(obj.shoot) == "function" then pcall(function() for _, uv in pairs(debug.getupvalues(obj.shoot)) do if type(uv) == "table" and rawget(uv, "Inventory") and rawget(uv.Inventory, "ShootWeapon") then SendFunc = uv.Inventory.ShootWeapon.Send break end end end) end if type(obj) == 'table' and rawget(obj, "getCurrentEquipped") then pcall(function() getCurrentEquipped = obj.getCurrentEquipped end) end end end) local function getEquipped() local success, result = pcall(function() return debug.getupvalue(getCurrentEquipped, 1).CurrentEquipped end) if not success then return nil end return result end local Weapon = nil task.spawn(function() while task.wait(1) do pcall(function() if getEquipped then Weapon = getEquipped() end end) end end) -- ========================================================================= -- [ TRACER SYSTEM ] -- ========================================================================= local function createTracerBean(startPos, endPos) if not Toggles.BulletTracers or not Toggles.BulletTracers.Value then return end if not startPos or not endPos then return end local style = Options.TracerStyle and Options.TracerStyle.Value or "Block" local tracerColor = Options.BulletTracersColor and Options.BulletTracersColor.Value or Color3.fromRGB(0, 170, 255) if Toggles.TracerRainbow and Toggles.TracerRainbow.Value then tracerColor = Color3.fromHSV((tick() % 5) / 5, 1, 1) end local duration = Options.TracerTime and Options.TracerTime.Value or 2 local beamPart = Instance.new("Part") beamPart.Name = "Spongy_Tracer" if style == "Cylinder (Obelius)" then beamPart.Shape = Enum.PartType.Cylinder beamPart.Size = Vector3.new((startPos - endPos).Magnitude, 0.12, 0.12) beamPart.CFrame = CFrame.new(startPos, endPos) * CFrame.new(0, 0, -beamPart.Size.X / 2) * CFrame.Angles(0, math.rad(90), 0) else beamPart.Size = Vector3.new(0.1, 0.1, (startPos - endPos).Magnitude) beamPart.CFrame = CFrame.new(startPos, endPos) * CFrame.new(0, 0, -beamPart.Size.Z / 2) end beamPart.Anchored = true beamPart.CanCollide = false beamPart.CanQuery = false beamPart.CanTouch = false beamPart.Material = Enum.Material.Neon beamPart.Color = tracerColor beamPart.Transparency = 0 beamPart.CastShadow = false beamPart.Parent = Workspace task.spawn(function() local startTime = tick() while tick() - startTime < duration do local alpha = (tick() - startTime) / duration beamPart.Transparency = alpha if Toggles.TracerRainbow and Toggles.TracerRainbow.Value then beamPart.Color = Color3.fromHSV((tick() % 5) / 5, 1, 1) end task.wait() end beamPart:Destroy() end) end local function createBulletImpact(hitPos) if not Toggles.BulletImpacts or not Toggles.BulletImpacts.Value then return end if not hitPos then return end local impactPart = Instance.new("Part") impactPart.Name = "Spongy_Impact" impactPart.Size = Vector3.new(0.6, 0.6, 0.6) impactPart.Shape = Enum.PartType.Block impactPart.Position = hitPos impactPart.Anchored = true impactPart.CanCollide = false impactPart.Material = Enum.Material.Neon impactPart.Color = Options.BulletImpactsColor.Value impactPart.Transparency = 0 impactPart.Parent = Workspace task.spawn(function() local startTime = tick() local duration = 3 while tick() - startTime < duration do local alpha = (tick() - startTime) / duration impactPart.Transparency = alpha task.wait() end impactPart:Destroy() end) end -- ========================================================================= -- [ RAGEBOT LOOP ] -- ========================================================================= task.spawn(function() while true do task.wait(Options.RageDelay and Options.RageDelay.Value or 0.02) if Toggles.Ragebot and Toggles.Ragebot.Value and RageTarget and Weapon and Weapon.IsEquipped and Weapon.Rounds > 0 then Weapon:shoot() end end end) -- ========================================================================= -- [ TRIGGERBOT LOOP ] -- ========================================================================= task.spawn(function() local trigRayParams = RaycastParams.new() trigRayParams.FilterType = Enum.RaycastFilterType.Exclude trigRayParams.IgnoreWater = true while true do task.wait(Options.TriggerbotDelay and Options.TriggerbotDelay.Value or 0.01) pcall(function() if Toggles.Triggerbot and Toggles.Triggerbot.Value then local cam = Workspace.CurrentCamera if not cam then return end local shouldShoot = false local origin = cam.CFrame.Position local direction = cam.CFrame.LookVector * 1000 trigRayParams.FilterDescendantsInstances = {LP.Character} local result = Workspace:Raycast(origin, direction, trigRayParams) if result and result.Instance then local char = result.Instance:FindFirstAncestorOfClass("Model") if char then local player = Players:GetPlayerFromCharacter(char) if player and player ~= LP then local _, onScreen = cam:WorldToViewportPoint(result.Instance.Position) if onScreen then if not char:GetAttribute("Dead") and not char:GetAttribute("Invincible") then if get_player_team(LP) ~= get_player_team(player) then shouldShoot = true end end end end end end if not shouldShoot and CubeSmartTarget and CubeSmartTarget.Parent then local _, onScreen = cam:WorldToViewportPoint(CubeSmartTarget.Position) if onScreen then local camLook = cam.CFrame.LookVector local toTarget = (CubeSmartTarget.Position - cam.CFrame.Position).Unit if camLook:Dot(toTarget) > 0.88 then local char = CubeSmartTarget.Parent if char and char:IsA("Model") then local isDead = char:GetAttribute("Dead") or char:GetAttribute("Invincible") local hp = char:GetAttribute("Health") if not isDead and (hp == nil or hp > 0) then if isEnemy(char) then shouldShoot = true end end end end end end if shouldShoot and Weapon then pcall(function() Weapon:shoot() end) end end end) end end) -- ========================================================================= -- [ CUBE TRIGGERBOT LOOP ] -- ========================================================================= task.spawn(function() local cubeTrigRayParams = RaycastParams.new() cubeTrigRayParams.FilterType = Enum.RaycastFilterType.Exclude cubeTrigRayParams.IgnoreWater = true while true do task.wait(Options.CubeTriggerbotDelay and Options.CubeTriggerbotDelay.Value or 0.01) pcall(function() local spongyActive = getSpongyActive() if spongyActive and (Toggles.CubeTriggerbot and Toggles.CubeTriggerbot.Value) then local cam = Workspace.CurrentCamera if not cam then return end local shouldShoot = false local origin = cam.CFrame.Position local direction = cam.CFrame.LookVector * 1000 cubeTrigRayParams.FilterDescendantsInstances = {LP.Character} local result = Workspace:Raycast(origin, direction, cubeTrigRayParams) if result and result.Instance then local char = result.Instance:FindFirstAncestorOfClass("Model") if char then local player = Players:GetPlayerFromCharacter(char) if player and player ~= LP then local _, onScreen = cam:WorldToViewportPoint(result.Instance.Position) if onScreen then if not char:GetAttribute("Dead") and not char:GetAttribute("Invincible") then if get_player_team(LP) ~= get_player_team(player) then shouldShoot = true end end end end end end if not shouldShoot and CubeSmartTarget and CubeSmartTarget.Parent then local _, onScreen = cam:WorldToViewportPoint(CubeSmartTarget.Position) if onScreen then local camLook = cam.CFrame.LookVector local toTarget = (CubeSmartTarget.Position - cam.CFrame.Position).Unit if camLook:Dot(toTarget) > 0.88 then local char = CubeSmartTarget.Parent if char and char:IsA("Model") then local isDead = char:GetAttribute("Dead") or char:GetAttribute("Invincible") local hp = char:GetAttribute("Health") if not isDead and (hp == nil or hp > 0) then if isEnemy(char) then shouldShoot = true end end end end end end if shouldShoot and Weapon then pcall(function() Weapon:shoot() end) end end end) end end) -- ========================================================================= -- [ SHOOT HOOK ] -- ========================================================================= local oldshoot pcall(function() if not SendFunc then return end oldshoot = hookfunction(SendFunc, function(...) local args = {...} local spongyActive = getSpongyActive() if args[1] and type(args[1].Bullets) == "table" then for _, bullet in pairs(args[1].Bullets) do if type(bullet.Hits) == "table" then for _, hitData in pairs(bullet.Hits) do local targetPart = nil if Toggles.Ragebot and Toggles.Ragebot.Value and RageTarget then targetPart = RageTarget elseif spongyActive and Toggles.CubeAimbotEnabled and Toggles.CubeAimbotEnabled.Value and CubeSmartTarget then local chosenPartName = Options.CubeHitPart and Options.CubeHitPart.Value or "Head" targetPart = CubeSmartTarget.Parent and CubeSmartTarget.Parent:FindFirstChild(chosenPartName) or CubeSmartTarget elseif Toggles.SilentAim and Toggles.SilentAim.Value and SilentTarget then targetPart = SilentTarget end -- Сохраняем логику наводки сайлента/рэйджа if targetPart then hitData.Instance = targetPart hitData.Position = targetPart.Position end pcall(function() local cam = Workspace.CurrentCamera if cam and hitData.Position then local startPos = cam.CFrame.Position local endPos = hitData.Position -- Точная 3D позиция попадания для хитмаркера createTracerBean(startPos, endPos) createBulletImpact(endPos) local isEnemyHit = false if hitData.Instance then local ancestorModel = hitData.Instance:FindFirstAncestorOfClass("Model") if ancestorModel then local hitPlayer = Players:GetPlayerFromCharacter(ancestorModel) if hitPlayer and hitPlayer ~= LP then if get_player_team(hitPlayer) ~= get_player_team(LP) then isEnemyHit = true end end end end -- Срабатывает звук и 3D-хитмаркер в точке endPos if isEnemyHit or targetPart then PlayHitSound() -- Вызываем твой 3D хитмаркер, передавая ему координаты точки попадания if TriggerHitMarkerEvent then pcall(function() TriggerHitMarkerEvent(endPos) end) end end end end) end end end end return oldshoot(unpack(args)) end) end) -- ========================================================================= -- [ FIRERATE LOOP ] -- ========================================================================= task.spawn(function() while task.wait(0.05) do pcall(function() if Toggles.Firerate and Toggles.Firerate.Value then for _, obj in next, firerateobjs do pcall(function() setreadonly(obj, false) rawset(obj, "FireRate", math.max(Options.FirerateSlider.Value, 0.01)) setreadonly(obj, true) end) end else for i, obj in next, firerateobjs do pcall(function() setreadonly(obj, false) rawset(obj, "FireRate", original[i].FireRate) setreadonly(obj, true) end) end end end) end end) -- ========================================================================= -- [ WORLD COLOR / NIGHT MODE ] -- ========================================================================= local WorldSettings = { WorldColorEnabled = false, WorldColor = Color3.fromRGB(255, 255, 255), SkyColorEnabled = false, SkyColor = Color3.fromRGB(255, 255, 255) } local function isLocalPlayerObject(obj) local char = LP.Character if char and (obj == char or obj:IsDescendantOf(char)) then return true end if obj:IsDescendantOf(Workspace.CurrentCamera) then return true end if obj.Name == "CubeChecker_Physical" or obj.Name:find("Spongy_") then return true end return false end local function colorObject(obj) if isLocalPlayerObject(obj) then return end if obj:IsA("BasePart") then if not obj:GetAttribute("OriginalColor") then obj:SetAttribute("OriginalColor", obj.Color) end obj.Color = WorldSettings.WorldColor elseif obj:IsA("Texture") or obj:IsA("Decal") then if not obj:GetAttribute("OriginalColor3") then obj:SetAttribute("OriginalColor3", obj.Color3) end obj.Color3 = WorldSettings.WorldColor end end local function restoreObject(obj) if obj:IsA("BasePart") then if obj:GetAttribute("OriginalColor") then obj.Color = obj:GetAttribute("OriginalColor") end elseif obj:IsA("Texture") or obj:IsA("Decal") then if obj:GetAttribute("OriginalColor3") then obj.Color3 = obj:GetAttribute("OriginalColor3") end end end local function RefreshWorldColor() for _, obj in ipairs(Workspace:GetDescendants()) do if WorldSettings.WorldColorEnabled then colorObject(obj) else restoreObject(obj) end end end Workspace.DescendantAdded:Connect(function(obj) if WorldSettings.WorldColorEnabled then task.defer(function() if obj and obj.Parent then colorObject(obj) end end) end end) RunService.RenderStepped:Connect(function() if WorldSettings.SkyColorEnabled then local skyColor = WorldSettings.SkyColor Lighting.Ambient = skyColor Lighting.OutdoorAmbient = skyColor Lighting.ColorShift_Bottom = skyColor Lighting.ColorShift_Top = skyColor Lighting.FogColor = skyColor local atmosphere = Lighting:FindFirstChild("KamibloxSky") if not atmosphere then atmosphere = Instance.new("Atmosphere") atmosphere.Name = "KamibloxSky" atmosphere.Parent = Lighting end atmosphere.Color = skyColor atmosphere.Decay = skyColor else local atmosphere = Lighting:FindFirstChild("KamibloxSky") if atmosphere then atmosphere:Destroy() end end end) local NightModeBox = Tabs.World:AddLeftGroupbox("Night Mode", "moon") NightModeBox:AddToggle("WorldColorToggle", { Text = "World Color", Default = false, Callback = function(state) WorldSettings.WorldColorEnabled = state RefreshWorldColor() end }):AddColorPicker("WorldColorPicker", { Default = Color3.fromRGB(255, 255, 255), Title = "World Color", Callback = function(c) WorldSettings.WorldColor = c if WorldSettings.WorldColorEnabled then RefreshWorldColor() end end }) NightModeBox:AddToggle("SkyColorToggle", { Text = "Second Color", Default = false, Callback = function(state) WorldSettings.SkyColorEnabled = state end }):AddColorPicker("SkyColorPicker", { Default = Color3.fromRGB(255, 255, 255), Title = "Second Color", Callback = function(c) WorldSettings.SkyColor = c end }) -- ========================================================================= -- [ ATMOSPHERE ] -- ========================================================================= local WorldBoxAtmosphere = Tabs.World:AddLeftGroupbox("Atmosphere", "globe") WorldBoxAtmosphere:AddToggle("Atmosphere", { Text = "Enable", Default = false, Callback = function(v) if v then if Toggles.EnableSkybox and Toggles.EnableSkybox.Value then Toggles.EnableSkybox:SetValue(false) end end end, }) WorldBoxAtmosphere:AddSlider("AtmosphereDensity", { Text = "Atmosphere Density", Default = 0.3, Min = 0, Max = 1, Rounding = 2 }) WorldBoxAtmosphere:AddSlider("Sub-AtmosphereHaze", { Text = "Atmosphere Haze", Default = 0, Min = 0, Max = 10, Rounding = 1 }) WorldBoxAtmosphere:AddSlider("AtmosphereGlare", { Text = "Atmosphere Glare", Default = 0, Min = 0, Max = 10, Rounding = 1 }) WorldBoxAtmosphere:AddToggle("EnableColorCorrection", { Text = "Enabled Color Correction", Default = false }) WorldBoxAtmosphere:AddSlider("SaturationSlider", { Text = "Saturation", Default = 0, Min = -1, Max = 1, Rounding = 2 }) WorldBoxAtmosphere:AddSlider("ContrastSlider", { Text = "Contrast", Default = 0, Min = -1, Max = 1, Rounding = 1 }) task.spawn(function() while task.wait(0.1) do pcall(function() if Toggles.Atmosphere and Toggles.Atmosphere.Value then if Toggles.EnableSkybox and Toggles.EnableSkybox.Value then Toggles.EnableSkybox:SetValue(false) end local atmosphere = Lighting:FindFirstChildOfClass("Atmosphere") if not atmosphere then atmosphere = Instance.new("Atmosphere", Lighting) end atmosphere.Density = Options.AtmosphereDensity and Options.AtmosphereDensity.Value or 0.3 atmosphere.Haze = Options.SubAtmosphereHaze and Options.SubAtmosphereHaze.Value or 0 atmosphere.Glare = Options.AtmosphereGlare and Options.AtmosphereGlare.Value or 0 else local atmosphere = Lighting:FindFirstChildOfClass("Atmosphere") if atmosphere then atmosphere:Destroy() end end if Toggles.EnableColorCorrection and Toggles.EnableColorCorrection.Value then local cc = Lighting:FindFirstChildOfClass("ColorCorrectionEffect") if not cc then cc = Instance.new("ColorCorrectionEffect", Lighting) end cc.Enabled = true cc.Saturation = Options.SaturationSlider and Options.SaturationSlider.Value or 0 cc.Contrast = Options.ContrastSlider and Options.ContrastSlider.Value or 0 else local cc = Lighting:FindFirstChildOfClass("ColorCorrectionEffect") if cc then cc.Enabled = false end end end) end end) -- ╔══════════════════════════════════════════════════════╗ -- ║ GrenadeZoneESP – Circle Edition v4 ║ -- ║ Cylinder outline, terrain-hugging, smooth fade ║ -- ║ Color synced to UI ColorPicker in realtime ║ -- ║ + Grenade Icon + Timer Ring ║ -- ╚══════════════════════════════════════════════════════╝ if _G.BS_CircleZoneLoaded then warn("[ZoneESP] Already running, skipping re-inject.") return end _G.BS_CircleZoneLoaded = true if not game:IsLoaded() then game.Loaded:Wait() end task.wait(1) if type(_G.Config) ~= "table" then _G.Config = {} end _G.Config.SmokeZoneESP = true _G.Config.MolotovZoneESP = true local function cfgDefault(k,v) if _G.Config[k]==nil then _G.Config[k]=v end end cfgDefault("GrenadeESP", false) cfgDefault("GrenadeTracers", false) cfgDefault("ColoredSmoke", false) cfgDefault("NoSmoke", false) cfgDefault("SmokeColor", Color3.fromRGB(255, 0, 0)) -- ═══════════════════════════════════════════════════════ -- ★ НАСТРОЙКИ ★ -- ═══════════════════════════════════════════════════════ local SETTINGS = { Smoke = { RadiusTrim = 0.0, HeightOffset = 0.3, Segments = 40, Thickness = 0.28, }, Molotov = { RadiusTrim = 4.5, HeightOffset = 0.3, Segments = 40, Thickness = 0.28, }, } local FADE_IN_TIME = 0.4 local FADE_OUT_TIME = 0.6 local RECALC_INTERVAL = 0.05 local RAYCAST_DOWN = 14 local function GetMolotovColor() if Options and Options.GrenadeZoneColor then return Options.GrenadeZoneColor.Value end return Color3.fromRGB(255, 60, 0) end local function GetSmokeColor() if Options and Options.SmokeZoneColor then return Options.SmokeZoneColor.Value end return Color3.fromRGB(180, 180, 180) end local RunService = game:GetService("RunService") local Camera = workspace.CurrentCamera local ActiveZones = {} local DebrisConnections = {} local RayParams = RaycastParams.new() RayParams.FilterType = Enum.RaycastFilterType.Exclude local function ComputeZoneBounds(parent) local sumX, sumZ = 0, 0 local minY = math.huge local count = 0 local parts = {} for _, v in ipairs(parent:GetChildren()) do if v:IsA("BasePart") then count = count + 1 sumX = sumX + v.Position.X sumZ = sumZ + v.Position.Z local b = v.Position.Y - v.Size.Y * 0.5 if b < minY then minY = b end table.insert(parts, v) end end if count == 0 then return nil, nil, false end local cx, cz = sumX/count, sumZ/count local maxR = 0 for _, p in ipairs(parts) do local dx = p.Position.X - cx local dz = p.Position.Z - cz local ext = math.max(p.Size.X, p.Size.Z) * 0.5 local r = math.sqrt(dx*dx + dz*dz) + ext if r > maxR then maxR = r end end return Vector3.new(cx, minY, cz), math.max(maxR, 1.2), true end local function GetGroundY(x, baseY, z, excludeList) RayParams.FilterDescendantsInstances = excludeList or {} local result = workspace:Raycast( Vector3.new(x, baseY + 5, z), Vector3.new(0, -RAYCAST_DOWN, 0), RayParams ) return result and result.Position.Y or baseY end local function MakeCylinder(col, thickness) local p = Instance.new("Part") p.Name = "BS_RingSeg" p.Anchored = true p.CanCollide = false p.CanQuery = false p.CastShadow = false p.Material = Enum.Material.Neon p.Color = col p.Transparency = 1 p.Shape = Enum.PartType.Cylinder p.Size = Vector3.new(thickness, thickness, thickness) p.Parent = workspace return p end local function CreateZoneRing(parent, cfg, isMolotov) if ActiveZones[parent] then return end local segments = cfg.Segments or 40 local thickness = cfg.Thickness or 0.28 local initColor = isMolotov and GetMolotovColor() or GetSmokeColor() local cylinders = {} local allParts = {} for i = 1, segments do local cyl = MakeCylinder(initColor, thickness) table.insert(cylinders, cyl) table.insert(allParts, cyl) end local record = { cylinders = cylinders, allParts = allParts, cfg = cfg, isMolotov = isMolotov, lastRecalc = 0, lastRadius = 1, alive = true, fadingOut = false, fadeAlpha = 0, } ActiveZones[parent] = record local fadeInStart = tick() local function CurrentAlpha() if record.fadingOut then return record.fadeAlpha end return math.clamp((tick() - fadeInStart) / FADE_IN_TIME, 0, 1) end local function FadeOut() if record.fadingOut then return end record.fadingOut = true record.fadeAlpha = CurrentAlpha() local startTick = tick() local startAlpha = record.fadeAlpha local conn conn = RunService.Heartbeat:Connect(function() local t = math.clamp((tick() - startTick) / FADE_OUT_TIME, 0, 1) record.fadeAlpha = startAlpha * (1 - t) local transp = 1 - record.fadeAlpha for _, cyl in ipairs(cylinders) do pcall(function() cyl.Transparency = transp end) end if t >= 1 then conn:Disconnect() record.alive = false for _, cyl in ipairs(cylinders) do pcall(function() cyl:Destroy() end) end ActiveZones[parent] = nil end end) end parent.AncestryChanged:Connect(function(_, newParent) if newParent == nil then FadeOut() end end) local updateConn updateConn = RunService.Heartbeat:Connect(function() if not record.alive then updateConn:Disconnect() return end if not parent or not parent.Parent then updateConn:Disconnect() FadeOut() return end local now = tick() if now - record.lastRecalc < RECALC_INTERVAL then return end record.lastRecalc = now local center, radius, found = ComputeZoneBounds(parent) if not found then return end local trim = cfg.RadiusTrim or 0 local smoothed = record.lastRadius + (radius - record.lastRadius) * 0.25 record.lastRadius = smoothed local finalR = math.max(smoothed - trim, 0.8) local alpha = CurrentAlpha() local transp = 1 - alpha local col = record.isMolotov and GetMolotovColor() or GetSmokeColor() for i, cyl in ipairs(cylinders) do local angleA = (2*math.pi) * ((i-1) / segments) local angleB = (2*math.pi) * (i / segments) local angleMid = (angleA + angleB) / 2 local xA = center.X + math.cos(angleA) * finalR local zA = center.Z + math.sin(angleA) * finalR local xB = center.X + math.cos(angleB) * finalR local zB = center.Z + math.sin(angleB) * finalR local xM = center.X + math.cos(angleMid) * finalR local zM = center.Z + math.sin(angleMid) * finalR local yA = GetGroundY(xA, center.Y, zA, allParts) + (cfg.HeightOffset or 0.3) local yB = GetGroundY(xB, center.Y, zB, allParts) + (cfg.HeightOffset or 0.3) local yM = (yA + yB) * 0.5 local posA = Vector3.new(xA, yA, zA) local posB = Vector3.new(xB, yB, zB) local mid = Vector3.new(xM, yM, zM) local dir = posB - posA local len = dir.Magnitude if len < 0.001 then continue end local cf = CFrame.lookAt(mid, mid + dir) * CFrame.Angles(0, math.rad(90), 0) cyl.CFrame = cf cyl.Size = Vector3.new(len, thickness, thickness) cyl.Color = col cyl.Transparency = transp end end) record.updateConn = updateConn end -- ========================================================================= -- [ GRENADE ZONE SCANNER - ДОБАВИТЬ ПОСЛЕ CreateZoneRing ] -- ========================================================================= local function IsToggleOn(name) if Toggles and Toggles[name] then return Toggles[name].Value end return false end local ScannedObjects = {} local function TryHandleObject(obj) if not obj or not obj.Parent then return end if ScannedObjects[obj] then return end local name = obj.Name:lower() -- МОЛОТОВ ЗОНА local isMolotov = ( name:find("firezone") or name:find("fire_zone") or name:find("molotov") or name:find("voxelfire") or name:find("ignite") or name:find("flamezone") or name:find("firearea") or name:find("burnzone") ) -- СМОК ЗОНА local isSmoke = ( name:find("smokezone") or name:find("smoke_zone") or name:find("voxelsmoke") or name:find("smokearea") or name:find("gaszone") ) if isMolotov and IsToggleOn("MolotovZoneESP") then ScannedObjects[obj] = true CreateZoneRing(obj, SETTINGS.Molotov, true) -- чистим когда объект удалён obj.AncestryChanged:Connect(function(_, p) if p == nil then ScannedObjects[obj] = nil end end) elseif isSmoke and IsToggleOn("SmokeZoneESP") then ScannedObjects[obj] = true CreateZoneRing(obj, SETTINGS.Smoke, false) obj.AncestryChanged:Connect(function(_, p) if p == nil then ScannedObjects[obj] = nil end end) end end local function ScanFolder(folder) if not folder then return end -- сканируем что уже есть for _, child in ipairs(folder:GetChildren()) do TryHandleObject(child) -- некоторые зоны это модели внутри которых папки for _, sub in ipairs(child:GetChildren()) do TryHandleObject(sub) end end -- слушаем новые объекты folder.ChildAdded:Connect(function(child) task.wait() -- ждём один кадр чтобы Name точно был TryHandleObject(child) child.ChildAdded:Connect(function(sub) task.wait() TryHandleObject(sub) end) end) end -- Сканируем Workspace и все папки где могут быть зоны task.spawn(function() task.wait(1) -- прямые дети workspace ScanFolder(Workspace) -- папка Debris если есть local debris = Workspace:FindFirstChild("Debris") if debris then ScanFolder(debris) end -- папка Effects если есть local effects = Workspace:FindFirstChild("Effects") if effects then ScanFolder(effects) end -- папка FX если есть local fx = Workspace:FindFirstChild("FX") if fx then ScanFolder(fx) end -- слушаем новые папки в workspace Workspace.ChildAdded:Connect(function(child) local n = child.Name:lower() if n == "debris" or n == "effects" or n == "fx" then ScanFolder(child) end task.wait() TryHandleObject(child) -- подпапки child.ChildAdded:Connect(function(sub) task.wait() TryHandleObject(sub) end) end) -- переповторяем поиск каждые 3 сек на случай если зоны появились позже while task.wait(3) do for _, child in ipairs(Workspace:GetChildren()) do TryHandleObject(child) for _, sub in ipairs(child:GetChildren()) do TryHandleObject(sub) end end end end) local function VisualizeShrapnel(pos) if not _G.Config.GrenadeTracers then return end -- ========================================================================= -- [ GRENADE FLIGHT TRACER - TRAIL ЗА ЛЕТЯЩЕЙ ГРАНАТОЙ ] -- ========================================================================= local GrenadeFlightTracers = {} local function StartGrenadeFlightTracer(part) if not part or not part:IsA("BasePart") then return end if GrenadeFlightTracers[part] then return end local MAX_TRAIL = 30 local history = {} local lines = {} for i = 1, MAX_TRAIL do local l = Drawing.new("Line") l.Visible = false l.Thickness = 2 l.Transparency = 1 lines[i] = l end GrenadeFlightTracers[part] = lines local conn conn = RunService.RenderStepped:Connect(function() local enabled = Toggles and Toggles.GrenadeTracers and Toggles.GrenadeTracers.Value local col = Options and Options.GrenadeTracerColor and Options.GrenadeTracerColor.Value or Color3.fromRGB(255, 100, 0) if not part or not part.Parent then conn:Disconnect() GrenadeFlightTracers[part] = nil if #history > 0 then VisualizeShrapnel(history[1]) end for _, l in ipairs(lines) do pcall(function() l:Remove() end) end return end if not enabled then for _, l in ipairs(lines) do l.Visible = false end return end table.insert(history, 1, part.Position) if #history > MAX_TRAIL + 1 then table.remove(history) end local cam = workspace.CurrentCamera for i = 1, MAX_TRAIL do local l = lines[i] local p1 = history[i] local p2 = history[i + 1] if not p1 or not p2 then l.Visible = false continue end local s1, o1 = cam:WorldToViewportPoint(p1) local s2, o2 = cam:WorldToViewportPoint(p2) if (o1 or o2) and s1.Z > 0 and s2.Z > 0 then local fade = 1 - (i / MAX_TRAIL) l.From = Vector2.new(s1.X, s1.Y) l.To = Vector2.new(s2.X, s2.Y) l.Color = col l.Thickness = math.max(2 * fade, 0.5) l.Transparency = 1 - fade l.Visible = true else l.Visible = false end end end) end -- ========================================================================= -- [ ДЕТЕКТОР ЛЕТЯЩИХ ГРАНАТ ] -- ========================================================================= local TrackedGrenades = {} local GRENADE_PATTERNS = { "grenade","flash","molotov","bang","frag", "he_","_he","throwable","projectile","nade", "incendiary","decoy","c4" } local GRENADE_BLACKLIST = { "gun","rifle","pistol","bullet","casing","debris", "light","muzzle","launch","effect","arm","leg", "torso","head","humanoid","mesh","handle", "constraint","weld","motor","zone","voxel" } local function isGrenadeObject(obj) if not obj:IsA("BasePart") and not obj:IsA("Model") then return false end local name = obj.Name:lower() for _, p in ipairs(GRENADE_BLACKLIST) do if name:find(p) then return false end end -- UUID формат — длинное имя с дефисами if #name > 20 and name:find("%-") then return true end for _, p in ipairs(GRENADE_PATTERNS) do if name:find(p) then return true end end return false end local function TryTrackGrenade(obj) if TrackedGrenades[obj] then return end local part = obj if obj:IsA("Model") then part = obj:FindFirstChild("Handle") or obj:FindFirstChildWhichIsA("BasePart") end if not part or not part:IsA("BasePart") then return end if part.Size.Magnitude > 8 then return end if Players:GetPlayerFromCharacter(obj) then return end if Players:GetPlayerFromCharacter(obj.Parent) then return end TrackedGrenades[obj] = true local cc cc = obj.AncestryChanged:Connect(function(_, p) if p == nil then TrackedGrenades[obj] = nil cc:Disconnect() end end) StartGrenadeFlightTracer(part) end local function ScanForGrenades(folder) if not folder then return end for _, child in ipairs(folder:GetChildren()) do if isGrenadeObject(child) then TryTrackGrenade(child) end if child:IsA("Model") then for _, sub in ipairs(child:GetChildren()) do if isGrenadeObject(sub) then TryTrackGrenade(sub) end end end end end task.spawn(function() task.wait(0.5) ScanForGrenades(Workspace) local toWatch = {"Debris","Effects","FX","Projectiles","Grenades"} for _, fname in ipairs(toWatch) do local f = Workspace:FindFirstChild(fname) if f then ScanForGrenades(f) f.ChildAdded:Connect(function(child) task.wait() if isGrenadeObject(child) then TryTrackGrenade(child) end end) end end Workspace.ChildAdded:Connect(function(child) task.wait() if isGrenadeObject(child) then TryTrackGrenade(child) end local n = child.Name:lower() if n=="debris" or n=="effects" or n=="fx" or n=="projectiles" or n=="grenades" then ScanForGrenades(child) child.ChildAdded:Connect(function(sub) task.wait() if isGrenadeObject(sub) then TryTrackGrenade(sub) end end) end child.ChildAdded:Connect(function(sub) task.wait() if isGrenadeObject(sub) then TryTrackGrenade(sub) end end) end) end) local lines = {} for i = 1, 16 do local line = Drawing.new("Line") line.Visible = true line.Color = Color3.fromRGB(255,100,0) line.Thickness = 2 line.Transparency = 1 local dir = Vector3.new(math.random()*2-1,math.random()*2-1,math.random()*2-1).Unit table.insert(lines, {obj=line, dir=dir}) end task.spawn(function() local Cam = workspace.CurrentCamera local s = tick() local conn conn = RunService.RenderStepped:Connect(function() local t = tick()-s if t > 0.8 then conn:Disconnect() for _,l in ipairs(lines) do l.obj:Remove() end return end local a = math.clamp(t/0.8,0,1) local e = (1-(1-a)^2)*12 for _,l in ipairs(lines) do local wS = pos+l.dir*(e*0.2) local wE = pos+l.dir*e local sS,o1 = Cam:WorldToViewportPoint(wS) local sE,o2 = Cam:WorldToViewportPoint(wE) l.obj.Visible = o1 or o2 if l.obj.Visible then l.obj.From = Vector2.new(sS.X,sS.Y) l.obj.To = Vector2.new(sE.X,sE.Y) l.obj.Transparency = 1-a end end end) end) end -- ========================================================================= -- [ CHAMS V3 — VestDetails TeamCheck + Visible/Unvisible Highlight ] -- ========================================================================= task.spawn(function() repeat task.wait() until Tabs and Tabs.Visuals repeat task.wait() until Toggles and Options local ChamsGroupbox = Tabs.Visuals:AddRightGroupbox("Chams") ChamsGroupbox:AddToggle("ChamsEnabled", { Text = "Enabled", Default = false }) ChamsGroupbox:AddToggle("ChamsTeamCheck", { Text = "TeamCheck", Default = true }) ChamsGroupbox:AddDivider() -- VISIBLE ChamsGroupbox:AddLabel("Visible") ChamsGroupbox:AddDropdown("ChamsMaterialVisible", { Text = "MaterialVisible", Values = {"Neon", "Metal", "ForceField", "SmoothPlastic"}, Default = "Neon", }) ChamsGroupbox:AddLabel("ColorVisible"):AddColorPicker("ChamsColorVisible", { Default = Color3.fromRGB(0, 200, 0), Title = "ColorVisible", }) ChamsGroupbox:AddSlider("ChamsAlphaVisible", { Text = "FillTransparencyVisible", Default = 0.3, Min = 0, Max = 1, Rounding = 2, }) ChamsGroupbox:AddSlider("ChamsOutlineAlphaVisible", { Text = "OutlineTransparencyVisible", Default = 0, Min = 0, Max = 1, Rounding = 2, }) ChamsGroupbox:AddDivider() -- UNVISIBLE ChamsGroupbox:AddLabel("Unvisible") ChamsGroupbox:AddDropdown("ChamsMaterialUnvisible", { Text = "MaterialUnvisible", Values = {"Neon", "Metal", "ForceField", "SmoothPlastic"}, Default = "Metal", }) ChamsGroupbox:AddLabel("ColorUnvisible"):AddColorPicker("ChamsColorUnvisible", { Default = Color3.fromRGB(200, 0, 0), Title = "ColorUnvisible", }) ChamsGroupbox:AddSlider("ChamsAlphaUnvisible", { Text = "FillTransparencyUnvisible", Default = 0.3, Min = 0, Max = 1, Rounding = 2, }) ChamsGroupbox:AddSlider("ChamsOutlineAlphaUnvisible", { Text = "OutlineTransparencyUnvisible", Default = 0, Min = 0, Max = 1, Rounding = 2, }) local Players = game:GetService("Players") local RunService= game:GetService("RunService") local Workspace = game:GetService("Workspace") local LP = Players.LocalPlayer local ESPFolder pcall(function() ESPFolder = Instance.new("Folder", game:GetService("CoreGui")) ESPFolder.Name = "Chams_Container" end) local Highlights = {} -- [char] = {visible=Highlight, unvisible=Highlight} local function getMaterial(str) if str == "Metal" then return Enum.Material.Metal elseif str == "ForceField" then return Enum.Material.ForceField elseif str == "SmoothPlastic" then return Enum.Material.SmoothPlastic else return Enum.Material.Neon end end local function removeChams(char) if Highlights[char] then pcall(function() Highlights[char].visible:Destroy() end) pcall(function() Highlights[char].unvisible:Destroy() end) Highlights[char] = nil end if not char then return end for _, obj in ipairs(char:GetDescendants()) do pcall(function() if obj:IsA("BasePart") and obj:GetAttribute("OrigMat") then obj.Material = Enum.Material[obj:GetAttribute("OrigMat")] obj.Color = obj:GetAttribute("OrigColor") or obj.Color obj:SetAttribute("OrigMat", nil) obj:SetAttribute("OrigColor", nil) end end) end end -- Тим чек через VestDetails -- Если У ТЕБЯ есть VestDetails → ты CT -- Применяй чамсы только на тех у кого нет VestDetails (T) -- и наоборот local function hasVestDetails(char) if not char then return false end local armor = char:FindFirstChild("CharacterArmor") if armor then return armor:FindFirstChild("VestDetails") ~= nil end return false end local function isTeammate(char) if not char then return false end local myChar = LP.Character if not myChar then return false end local myHasVest = hasVestDetails(myChar) local hisHasVest = hasVestDetails(char) -- Союзник = одинаковая сторона (оба с жилетом или оба без) return myHasVest == hisHasVest end -- Raycast видимости local RayParams = RaycastParams.new() RayParams.FilterType = Enum.RaycastFilterType.Exclude local function isVisible(char) local root = char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("Head") if not root then return false end local camPos = Workspace.CurrentCamera.CFrame.Position local dir = root.Position - camPos RayParams.FilterDescendantsInstances = {LP.Character, char} local result = Workspace:Raycast(camPos, dir, RayParams) return result == nil end RunService.RenderStepped:Connect(function() local enabled = Toggles.ChamsEnabled and Toggles.ChamsEnabled.Value local teamCheckOn = Toggles.ChamsTeamCheck and Toggles.ChamsTeamCheck.Value local matVisible = getMaterial(Options.ChamsMaterialVisible and Options.ChamsMaterialVisible.Value or "Neon") local matUnvisible = getMaterial(Options.ChamsMaterialUnvisible and Options.ChamsMaterialUnvisible.Value or "Metal") local colVisible = Options.ChamsColorVisible and Options.ChamsColorVisible.Value or Color3.fromRGB(0,200,0) local colUnvisible = Options.ChamsColorUnvisible and Options.ChamsColorUnvisible.Value or Color3.fromRGB(200,0,0) local fillAlphaVis = Options.ChamsAlphaVisible and Options.ChamsAlphaVisible.Value or 0.3 local fillAlphaUnvis = Options.ChamsAlphaUnvisible and Options.ChamsAlphaUnvisible.Value or 0.3 local outAlphaVis = Options.ChamsOutlineAlphaVisible and Options.ChamsOutlineAlphaVisible.Value or 0 local outAlphaUnvis = Options.ChamsOutlineAlphaUnvisible and Options.ChamsOutlineAlphaUnvisible.Value or 0 local charactersFolder = Workspace:FindFirstChild("Characters") if not charactersFolder then return end -- Собираем все вражеские чары local enemyChars = {} for _, obj in ipairs(charactersFolder:GetDescendants()) do if obj:IsA("Model") and obj:FindFirstChild("HumanoidRootPart") then local char = obj if char == LP.Character then continue end if teamCheckOn and isTeammate(char) then removeChams(char) continue end if not enabled then removeChams(char) continue end table.insert(enemyChars, char) end end -- Применяем чамсы for _, char in ipairs(enemyChars) do -- Создаём highlights если нет if not Highlights[char] then local hlVis = Instance.new("Highlight") hlVis.DepthMode = Enum.HighlightDepthMode.Occluded hlVis.Parent = ESPFolder local hlUnvis = Instance.new("Highlight") hlUnvis.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop hlUnvis.Parent = ESPFolder Highlights[char] = { visible = hlVis, unvisible = hlUnvis } -- Чистим при удалении char.AncestryChanged:Connect(function(_, newParent) if newParent == nil then removeChams(char) end end) end local hl = Highlights[char] local seen = isVisible(char) -- Visible highlight (Occluded — только когда виден) hl.visible.Adornee = char hl.visible.FillColor = colVisible hl.visible.OutlineColor = colVisible hl.visible.FillTransparency = fillAlphaVis hl.visible.OutlineTransparency= outAlphaVis hl.visible.Enabled = seen -- Unvisible highlight (AlwaysOnTop — сквозь стену) hl.unvisible.Adornee = char hl.unvisible.FillColor = colUnvisible hl.unvisible.OutlineColor = colUnvisible hl.unvisible.FillTransparency = fillAlphaUnvis hl.unvisible.OutlineTransparency= outAlphaUnvis hl.unvisible.Enabled = not seen -- Материал и цвет частей local targetMat = seen and matVisible or matUnvisible local targetCol = seen and colVisible or colUnvisible for _, part in ipairs(char:GetDescendants()) do pcall(function() if part:IsA("SurfaceAppearance") or part:IsA("Decal") or part:IsA("Texture") then part:Destroy() elseif part:IsA("MeshPart") and part.TextureID ~= "" then part.TextureID = "" elseif part:IsA("SpecialMesh") and part.TextureId ~= "" then part.TextureId = "" end if part:IsA("BasePart") then if not part:GetAttribute("OrigMat") then part:SetAttribute("OrigMat", part.Material.Name) part:SetAttribute("OrigColor", part.Color) end part.Material = targetMat part.Color = targetCol end end) end end end) Players.PlayerRemoving:Connect(function(player) if player.Character then removeChams(player.Character) end end) end) -- Помещаем всё в task.spawn, чтобы не создавать локальных переменных в корне скрипта task.spawn(function() local MiscWeaponBox = Tabs.Weapons:AddRightGroupbox("Weapon", "crosshair") MiscWeaponBox:AddToggle("InstantReload", { Text = "Instant Reload", Default = false, }) local RELOAD_ANIMS = { ["Reload"] = true, ["ReloadStart"] = true, ["ReloadAction"] = true, ["ReloadEnd"] = true, } local RELOAD_SPEED = 199 local reloadHooked = {} local function getWeaponObjectSafe() local ok, IC = pcall(function() return require(game:GetService("ReplicatedStorage").Controllers.InventoryController) end) if not ok or not IC then return nil end return IC.peekCurrentEquippedForMovement and IC.peekCurrentEquippedForMovement() or nil end local function hookAnimationReload(animModule) if not animModule or reloadHooked[animModule] then return end reloadHooked[animModule] = true pcall(function() local origPlay = animModule.play animModule.play = function(self_anim, animName, ...) local track = origPlay(self_anim, animName, ...) if track and RELOAD_ANIMS[animName] then task.defer(function() pcall(function() if Toggles.InstantReload and Toggles.InstantReload.Value then if track.IsPlaying then track:AdjustSpeed(RELOAD_SPEED) end end end) end) end return track end end) end local lastReloadWeapon = nil task.spawn(function() while task.wait(0.1) do pcall(function() local weapon = getWeaponObjectSafe() if not weapon then return end if weapon ~= lastReloadWeapon then lastReloadWeapon = weapon if weapon.Viewmodel and weapon.Viewmodel.Animation then hookAnimationReload(weapon.Viewmodel.Animation) end if weapon.CharacterAnimator then hookAnimationReload(weapon.CharacterAnimator) end end if not (Toggles.InstantReload and Toggles.InstantReload.Value) then return end if weapon.IsReloading then pcall(function() if weapon.Viewmodel and weapon.Viewmodel.Animation and weapon.Viewmodel.Animation.Animations then for name, track in pairs(weapon.Viewmodel.Animation.Animations) do if RELOAD_ANIMS[name] and track.IsPlaying then track:AdjustSpeed(RELOAD_SPEED) end end end if weapon.CharacterAnimator and weapon.CharacterAnimator.Animations then for name, track in pairs(weapon.CharacterAnimator.Animations) do if RELOAD_ANIMS[name] and track.IsPlaying then track:AdjustSpeed(RELOAD_SPEED) end end end end) end end) end end) pcall(function() local IC = require(game:GetService("ReplicatedStorage").Controllers.InventoryController) if IC.OnInventoryItemEquipped then IC.OnInventoryItemEquipped:Connect(function(_, weapon) if not weapon then return end task.defer(function() if weapon.Viewmodel and weapon.Viewmodel.Animation then hookAnimationReload(weapon.Viewmodel.Animation) end if weapon.CharacterAnimator then hookAnimationReload(weapon.CharacterAnimator) end end) end) end end) end) -- ========================================================================= -- [ SETTINGS FINALIZATION ] -- ========================================================================= SettingsGroup:AddButton("Unload Menu", function() Library:Unload() end) ThemeManager:SetLibrary(Library) SaveManager:SetLibrary(Library) SaveManager:IgnoreThemeSettings() SaveManager:SetIgnoreIndexes({ "MenuKeybind" }) ThemeManager:SetFolder("spongy") SaveManager:SetFolder("spongy/bloxstrike") SaveManager:SetSubFolder("spongy") SaveManager:BuildConfigSection(Tabs.Settings) ThemeManager:ApplyToTab(Tabs.Settings) SaveManager:LoadAutoloadConfig() -- ========================================================================= -- [ END OF SPONGY.CC | FULL BUILD ] -- =========================================================================