-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] -- Chams v5: Enemies + Players + Scrap, настройка цвета/заливки из меню -- RightShift / K — меню. Перетаскивание — за заголовок. local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer if _G.CHAMS_SHUTDOWN then pcall(_G.CHAMS_SHUTDOWN) end -- поколение скрипта: повторный запуск/выгрузка убивает фоновые циклы прошлых версий _G.CHAMS_GEN = (_G.CHAMS_GEN or 0) + 1 local GEN = _G.CHAMS_GEN local CONFIG = { Enemies = true, PlayersChams = true, Scrap = true, EnemyColor = Color3.fromRGB(255, 60, 0), PlayerColor = Color3.fromRGB(0, 170, 255), ScrapColor = Color3.fromRGB(255, 230, 0), Outline = Color3.fromRGB(255, 255, 255), EnemyFillT = 0.5, PlayerFillT = 0.5, ScrapFillT = 0.4, } local function purgeOld() for _, d in ipairs(game:GetDescendants()) do if d:IsA("Highlight") and d.Name:match("^Chams") then d.Enabled = false d:Destroy() end end local pg = LocalPlayer:FindFirstChild("PlayerGui") for _, g in ipairs(pg and pg:GetChildren() or {}) do if g:IsA("ScreenGui") and g.Name:match("^ChamsMenu") then g:Destroy() end end end purgeOld() local function makeHighlight(target, fill, fillT) local hl = Instance.new("Highlight") hl.Name = "ChamsV5" hl.Adornee = target hl.FillColor = fill hl.OutlineColor = CONFIG.Outline hl.FillTransparency = fillT hl.OutlineTransparency = 0 hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop hl.Parent = target return hl end -- сбор моделей-энтити: все потомки папок (в т.ч. подпапка GHOSTS), без вложенных дубликатов local function collectEntityModels(folderNames) local models = {} for _, folderName in ipairs(folderNames) do local folder = workspace:FindFirstChild(folderName) if folder then for _, d in ipairs(folder:GetDescendants()) do if d:IsA("Model") and d:FindFirstChildOfClass("Humanoid") then models[d] = true end end end end for m in pairs(models) do local p = m.Parent while p do if models[p] then models[m] = nil -- внутри уже подсвечиваемой модели — пропускаем break end p = p.Parent end end return models end -- // Enemies: модели в Entities (серверные) и в Client (видимые, напр. Ragdoll) // local enemyHighlights = {} -- [model] = highlight local function addEnemy(model) if enemyHighlights[model] then return end local hl = makeHighlight(model, CONFIG.EnemyColor, CONFIG.EnemyFillT) hl.Enabled = CONFIG.Enemies enemyHighlights[model] = hl end local function refreshEnemies() for m in pairs(collectEntityModels({"Entities", "Client"})) do addEnemy(m) end -- чистка мёртвых ссылок for model, hl in pairs(enemyHighlights) do if not model.Parent or not hl.Parent then enemyHighlights[model] = nil end end end local function eachEnemy(fn) for _, hl in pairs(enemyHighlights) do fn(hl) end end -- // Players: персонажи игроков + их трупы (Characters.PlayerCorpses выглядят -- как обычные игроки, без подсветки выглядели бы "пропавшими") // local playerHighlights = {} -- [model] = highlight local function addPlayerModel(model) if playerHighlights[model] then return end local hl = makeHighlight(model, CONFIG.PlayerColor, CONFIG.PlayerFillT) hl.Enabled = CONFIG.PlayersChams playerHighlights[model] = hl end local function refreshPlayers() for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer and p.Character then addPlayerModel(p.Character) end end local chars = workspace:FindFirstChild("Characters") local corpses = chars and chars:FindFirstChild("PlayerCorpses") if corpses then for _, m in ipairs(corpses:GetChildren()) do if m:IsA("Model") then addPlayerModel(m) end end end for model, hl in pairs(playerHighlights) do if not model.Parent or not hl.Parent then playerHighlights[model] = nil end end end local function eachPlayerHL(fn) for _, hl in pairs(playerHighlights) do fn(hl) end end -- // Scrap: Highlight на каждую деталь (родителя НЕ трогаем — подбор требует -- нахождения в Debris.Map). Roblox рендерит максимум 31 хайлайт одновременно, -- поэтому включаем ближайшие к камере в пределах бюджета; игроки/враги в приоритете. -- Подобранный скрап игра делает прозрачностью 0.8 — такие отключаем // local scrapHighlights = {} -- [part] = highlight local function refreshScrap() local camPos = workspace.CurrentCamera and workspace.CurrentCamera.CFrame.Position local debris = workspace:FindFirstChild("Debris") local found = {} if debris then for _, d in ipairs(debris:GetDescendants()) do if d:IsA("BasePart") and d.Name == "Scrap" then found[d] = true if not scrapHighlights[d] then local hl = Instance.new("Highlight") hl.Name = "ChamsV5" hl.Adornee = d hl.FillColor = CONFIG.ScrapColor hl.OutlineColor = CONFIG.Outline hl.FillTransparency = CONFIG.ScrapFillT hl.OutlineTransparency = 0 hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop hl.Parent = d scrapHighlights[d] = hl end end end end local active = {} for part, hl in pairs(scrapHighlights) do if not found[part] or not part.Parent then if hl then hl:Destroy() end scrapHighlights[part] = nil else table.insert(active, part) end end local used = 0 for _, hl in pairs(playerHighlights) do if hl.Parent and hl.Enabled then used += 1 end end for _, hl in pairs(enemyHighlights) do if hl.Parent and hl.Enabled then used += 1 end end local budget = CONFIG.Scrap and (31 - used - 2) or 0 table.sort(active, function(a, b) if not camPos then return false end return (a.Position - camPos).Magnitude < (b.Position - camPos).Magnitude end) for i, part in ipairs(active) do local hl = scrapHighlights[part] local collected = part.Transparency >= 0.7 hl.Enabled = (i <= budget) and not collected end end local function eachScrapHL(fn) for _, hl in pairs(scrapHighlights) do fn(hl) end end -- // AutoFarm: телепорт к скрапу с проверкой энтити (30 стадов) // local AutoFarm = { Enabled = false, Status = "выключен", SafeDist = 30, } -- свежие позиции ТОЛЬКО реальных убийц: модели в Entities с KillerAssets/AI. -- Client-модели (свой рэгдолл, timer) — не угрозы, иначе ферма вечно "спасается" local function scanEntityPositions() local list = {} for m in pairs(collectEntityModels({"Entities"})) do if m:FindFirstChild("KillerAssets") or m:FindFirstChild("AI") then local pp = m:FindFirstChild("HumanoidRootPart") or m:FindFirstChildWhichIsA("BasePart") if pp then table.insert(list, pp.Position) end end end return list end local function nearestFrom(list, pos) local best, bestPos = math.huge, nil for _, epos in ipairs(list) do local d = (epos - pos).Magnitude if d < best then best, bestPos = d, epos end end return best, bestPos end local function getScrapParts() local debris = workspace:FindFirstChild("Debris") local list = {} if debris then for _, d in ipairs(debris:GetDescendants()) do if d:IsA("BasePart") and d.Name == "Scrap" and d.Transparency < 0.7 then table.insert(list, d) end end end return list end local function charRoot() local ch = LocalPlayer.Character return ch and (ch:FindFirstChild("HumanoidRootPart") or ch:FindFirstChildWhichIsA("BasePart")) end -- границы карты: невидимый бокс PathBounds; долгое нахождение вне его сервер убивает local boundsCache, boundsTime = nil, 0 local function getMapBounds() local now = os.clock() if boundsCache and boundsCache.Parent and now - boundsTime < 5 then return boundsCache end boundsTime = now boundsCache = nil local mf = workspace:FindFirstChild("MapFolder") if mf then for _, d in ipairs(mf:GetDescendants()) do if d:IsA("BasePart") and d.Name == "PathBounds" then boundsCache = d break end end end return boundsCache end local function inMapBounds(pos, margin) local b = getMapBounds() if not b then return true end margin = margin or 8 local rel = b.CFrame:PointToObjectSpace(pos) local h = b.Size / 2 return math.abs(rel.X) <= h.X - margin and math.abs(rel.Z) <= h.Z - margin end local function tryInstantCollect(target) -- мгновенный подбор: симулируем касание Hitbox'ов, не ждём физику local ch = LocalPlayer.Character if not ch then return end local hrp = ch:FindFirstChild("HumanoidRootPart") local myHitbox = hrp and hrp:FindFirstChild("Hitbox") if not (myHitbox and myHitbox:IsA("BasePart")) then myHitbox = hrp end local scrapHitbox = target:FindFirstChild("Hitbox") if not (myHitbox and scrapHitbox and scrapHitbox:IsA("BasePart")) then return end pcall(function() firetouchinterest(myHitbox, scrapHitbox, 0) end) task.wait(0.05) pcall(function() firetouchinterest(myHitbox, scrapHitbox, 1) end) end -- точка побега: перебираем направления/дистанции; рейкаст только по геометрии карты, -- точка обязана быть в границах PathBounds и в 40 стадов от энтити local function safeFleeSpot(root, threatPos, entPositions) local mf = workspace:FindFirstChild("MapFolder") if not mf then return nil end local params = RaycastParams.new() params.FilterType = Enum.RaycastFilterType.Include params.FilterDescendantsInstances = {mf} local dirs = { Vector3.new(1, 0, 0), Vector3.new(-1, 0, 0), Vector3.new(0, 0, 1), Vector3.new(0, 0, -1), Vector3.new(1, 0, 1), Vector3.new(1, 0, -1), Vector3.new(-1, 0, 1), Vector3.new(-1, 0, -1), } local away = (root.Position - threatPos) * Vector3.new(1, 0, 1) if away.Magnitude > 1 then table.insert(dirs, 1, away.Unit) -- приоритет — направление от угрозы end for _, dir in ipairs(dirs) do for _, dist in ipairs({80, 60, 100, 40}) do local origin = root.Position + dir * dist + Vector3.new(0, 60, 0) local hit = workspace:Raycast(origin, Vector3.new(0, -200, 0), params) if hit then local land = hit.Position + Vector3.new(0, 4, 0) if not inMapBounds(land, 10) then continue end local ok = true for _, ep in ipairs(entPositions) do if (ep - land).Magnitude < 40 then ok = false break end end if ok then return land end end end end return nil end -- возврат при выключении: безопасная точка на карте, минимум 60 стадов от энтити local function teleportToSafeMapSpot() local root = charRoot() if not root then return false end -- только игровая карта (Round/Main), НЕ лобби из Misc — оно вне PathBounds local mf = workspace:FindFirstChild("MapFolder") local map = mf and (mf:FindFirstChild("Round") or mf:FindFirstChild("Main")) if not map then local debris = workspace:FindFirstChild("Debris") map = debris and debris:FindFirstChild("Map") end if not map then return false end local entPositions = scanEntityPositions() local params = RaycastParams.new() params.FilterType = Enum.RaycastFilterType.Include params.FilterDescendantsInstances = {map} -- уже в границах карты, на её геометрии и далеко от энтити — не дёргаем игрока local here = workspace:Raycast(root.Position + Vector3.new(0, 10, 0), Vector3.new(0, -300, 0), params) if here and inMapBounds(root.Position, 10) and select(1, nearestFrom(entPositions, root.Position)) >= 60 then return true end -- кандидаты: точки над деталями карты, рейкастом вниз ищем ровную поверхность в границах local parts = {} for _, d in ipairs(map:GetDescendants()) do if d:IsA("BasePart") and d.Transparency < 1 and d.Size.Magnitude >= 4 then table.insert(parts, d) end end local step = math.max(1, math.floor(#parts / 80)) local best, bestDist = nil, -1 for i = 1, #parts, step do local origin = parts[i].Position + Vector3.new(0, 80, 0) local hit = workspace:Raycast(origin, Vector3.new(0, -160, 0), params) if hit and hit.Normal.Y > 0.85 then local land = hit.Position + Vector3.new(0, 4, 0) if inMapBounds(land, 12) then local nd = select(1, nearestFrom(entPositions, land)) if nd >= 60 and nd > bestDist then best, bestDist = land, nd end end end end if best then root.CFrame = CFrame.new(best) return true end return false end task.spawn(function() local blacklist, lastTarget, attempts = {}, nil, 0 while _G.CHAMS_GEN == GEN do task.wait(0.3) if AutoFarm.Status and AutoFarm.Label then AutoFarm.Label.Text = AutoFarm.Status end if AutoFarm.Enabled then local root = charRoot() if root then local myPos = root.Position local entPositions = scanEntityPositions() local threatDist, threatPos = nearestFrom(entPositions, myPos) local threatened = threatDist < AutoFarm.SafeDist local scraps = getScrapParts() table.sort(scraps, function(a, b) return (a.Position - myPos).Magnitude < (b.Position - myPos).Magnitude end) -- из 5 ближайших безопасных кусков берём тот, что дальше всего от энтити local now = os.clock() local safe, unsafe = {}, 0 for _, s in ipairs(scraps) do if (blacklist[s] or 0) > now then continue end local d = select(1, nearestFrom(entPositions, s.Position)) if d < AutoFarm.SafeDist then unsafe += 1 else table.insert(safe, {s, d}) end if #safe >= 5 then break end end local target = nil if #safe > 0 then table.sort(safe, function(a, b) return a[2] > b[2] end) target = safe[1][1] end if target then if target == lastTarget then attempts += 1 if attempts >= 3 then blacklist[target] = now + 15 lastTarget, attempts = nil, 0 continue end else lastTarget, attempts = target, 0 end root.CFrame = CFrame.new(target.Position + Vector3.new(0, 1, 0)) AutoFarm.Status = (threatened and "УГРОЗА! бегу к безопасному скрапу" or "Фарм: телепорт к скрапу") .. " (" .. #scraps .. " шт., небезопасных: " .. unsafe .. ")" if AutoFarm.Label then AutoFarm.Label.Text = AutoFarm.Status end -- стоим на куске, пока не подобран, максимум 3с; тач и джиттер-телепорт каждые 0.3с; -- при угрозе бросаем local deadline = os.clock() + 3 local jitter = 0.5 while os.clock() < deadline and _G.CHAMS_GEN == GEN do if not target.Parent or target.Transparency >= 0.7 then break end local td = select(1, nearestFrom(scanEntityPositions(), root.Position)) if td < AutoFarm.SafeDist then break end -- лёгкий сдвиг генерирует настоящее физическое касание в дополнение к firetouch jitter = -jitter root.CFrame = CFrame.new(target.Position + Vector3.new(jitter, 1, -jitter)) tryInstantCollect(target) task.wait(0.3) end -- пауза после подтверждённого подбора: сервер может ограничивать частоту TryCollect if target.Parent and target.Transparency >= 0.7 then task.wait(0.6) end elseif threatened and threatPos then local land = safeFleeSpot(root, threatPos, entPositions) if land then root.CFrame = CFrame.new(land) AutoFarm.Status = "УГРОЗА! безопасного скрапа нет — телепорт в безопасную точку" else AutoFarm.Status = "УГРОЗА! безопасной точки не нашёл — стою" end else if not inMapBounds(root.Position) then task.spawn(teleportToSafeMapSpot) AutoFarm.Status = "Вне карты — возврат в границы" else AutoFarm.Status = "Скрапа нет / весь небезопасен (" .. unsafe .. " близ энтити), жду" end end end end end end) -- // CaptureFarm: авто-зарядка ControlPoint'ов (лампы включены = точка захвачена) // local CaptureFarm = { Enabled = false, Status = "выключен", SafeDist = 30, Label = nil, } local function getUnchargedPoints() local mf = workspace:FindFirstChild("MapFolder") local round = mf and mf:FindFirstChild("Round") local list = {} if round then for _, m in ipairs(round:GetChildren()) do if m.Name == "ControlPoint" then local captured = false for _, d in ipairs(m:GetDescendants()) do if d:IsA("PointLight") and d.Enabled then captured = true break end end local hb = m:FindFirstChild("Hitbox") if hb and not captured then table.insert(list, hb) end end end end return list end task.spawn(function() local fleeing = false -- гистерезис: после побега возвращаемся только когда совсем безопасно while _G.CHAMS_GEN == GEN do task.wait(0.4) if CaptureFarm.Status and CaptureFarm.Label then CaptureFarm.Label.Text = CaptureFarm.Status end if CaptureFarm.Enabled then local root = charRoot() if root then local entPositions = scanEntityPositions() local threatDist, threatPos = nearestFrom(entPositions, root.Position) local limit = fleeing and CaptureFarm.SafeDist * 1.5 or CaptureFarm.SafeDist if threatDist < limit then fleeing = true local land = safeFleeSpot(root, threatPos, entPositions) if land then root.CFrame = CFrame.new(land) CaptureFarm.Status = "УГРОЗА! ушёл с точки, вернусь когда безопасно" else CaptureFarm.Status = "УГРОЗА! безопасной точки не нашёл" end continue end fleeing = false local points = getUnchargedPoints() if #points == 0 then if not inMapBounds(root.Position) then task.spawn(teleportToSafeMapSpot) CaptureFarm.Status = "Вне карты — возврат в границы" else CaptureFarm.Status = "Незаряженных точек нет — готово" end continue end local myPos = root.Position table.sort(points, function(a, b) return (a.Position - myPos).Magnitude < (b.Position - myPos).Magnitude end) root.CFrame = CFrame.new(points[1].Position + Vector3.new(0, 2, 0)) local od = game:GetService("ReplicatedStorage"):FindFirstChild("RoundInfo") and game.ReplicatedStorage.RoundInfo:FindFirstChild("ObjectiveData") CaptureFarm.Status = "Захват точки, осталось: " .. #points .. (od and (" (счёт " .. tostring(od:GetAttribute("Captured")) .. "/" .. tostring(od:GetAttribute("Required")) .. ")") or "") end end end end) -- // Fullbright: нейтрализуем темноту, оригинал сохраняем для отката // local Lighting = game:GetService("Lighting") local Fullbright = {Enabled = false, saved = nil} local function fullbrightApply() Lighting.Ambient = Color3.new(1, 1, 1) Lighting.OutdoorAmbient = Color3.new(1, 1, 1) Lighting.Brightness = 2 Lighting.ClockTime = 14 Lighting.GlobalShadows = false for _, e in ipairs(Lighting:GetChildren()) do if e:IsA("Atmosphere") then e.Density = 0 e.Haze = 0 e.Glare = 0 elseif e:IsA("ColorCorrectionEffect") then e.Brightness = 0 e.Contrast = 0 e.Saturation = 0 e.TintColor = Color3.new(1, 1, 1) end end end local function fullbrightOn() if Fullbright.saved then return end local saved = { Ambient = Lighting.Ambient, OutdoorAmbient = Lighting.OutdoorAmbient, Brightness = Lighting.Brightness, ClockTime = Lighting.ClockTime, GlobalShadows = Lighting.GlobalShadows, effects = {}, } for _, e in ipairs(Lighting:GetChildren()) do if e:IsA("Atmosphere") then saved.effects[e] = {atmos = true, Density = e.Density, Haze = e.Haze, Glare = e.Glare} elseif e:IsA("ColorCorrectionEffect") then saved.effects[e] = {Brightness = e.Brightness, Contrast = e.Contrast, Saturation = e.Saturation, TintColor = e.TintColor} end end Fullbright.saved = saved fullbrightApply() end local function fullbrightOff() local saved = Fullbright.saved if not saved then return end Lighting.Ambient = saved.Ambient Lighting.OutdoorAmbient = saved.OutdoorAmbient Lighting.Brightness = saved.Brightness Lighting.ClockTime = saved.ClockTime Lighting.GlobalShadows = saved.GlobalShadows for e, p in pairs(saved.effects) do if e.Parent then if p.atmos then e.Density, e.Haze, e.Glare = p.Density, p.Haze, p.Glare else e.Brightness, e.Contrast, e.Saturation, e.TintColor = p.Brightness, p.Contrast, p.Saturation, p.TintColor end end end Fullbright.saved = nil end -- // Noclip + Fly // local Noclip = {Enabled = false} local Fly = {Enabled = false, Speed = 80, conn = nil, parts = nil} local function flyCleanup() if Fly.conn then Fly.conn:Disconnect() Fly.conn = nil end if Fly.parts then for _, p in ipairs(Fly.parts) do if p and p.Parent then p:Destroy() end end Fly.parts = nil end local ch = LocalPlayer.Character local hum = ch and ch:FindFirstChildOfClass("Humanoid") if hum then hum.PlatformStand = false for _, tr in ipairs(hum:GetPlayingAnimationTracks()) do tr:AdjustSpeed(1) end end end local function flyStart() flyCleanup() local ch = LocalPlayer.Character local hrp = ch and ch:FindFirstChild("HumanoidRootPart") if not hrp then return end local hum = ch:FindFirstChildOfClass("Humanoid") if hum then hum.PlatformStand = true end local bv = Instance.new("BodyVelocity") bv.MaxForce = Vector3.new(1e9, 1e9, 1e9) bv.Velocity = Vector3.zero bv.Parent = hrp local bg = Instance.new("BodyGyro") bg.MaxTorque = Vector3.new(1e9, 1e9, 1e9) bg.P = 9e4 bg.D = 5e3 bg.CFrame = hrp.CFrame bg.Parent = hrp Fly.parts = {bv, bg} Fly.conn = RunService.RenderStepped:Connect(function() local bv2, bg2 = Fly.parts[1], Fly.parts[2] if not (bv2 and bv2.Parent and bg2 and bg2.Parent) then return end local cam = workspace.CurrentCamera local move = Vector3.zero -- при вводе в чат/TextBox клавиши не двигают полёт if not UserInputService:GetFocusedTextBox() then if UserInputService:IsKeyDown(Enum.KeyCode.W) then move += cam.CFrame.LookVector end if UserInputService:IsKeyDown(Enum.KeyCode.S) then move -= cam.CFrame.LookVector end if UserInputService:IsKeyDown(Enum.KeyCode.D) then move += cam.CFrame.RightVector end if UserInputService:IsKeyDown(Enum.KeyCode.A) then move -= cam.CFrame.RightVector end if UserInputService:IsKeyDown(Enum.KeyCode.Space) then move += Vector3.new(0, 1, 0) end if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) then move -= Vector3.new(0, 1, 0) end end bv2.Velocity = move.Magnitude > 0 and move.Unit * Fly.Speed or Vector3.zero bg2.CFrame = cam.CFrame -- кастомный риг игры продолжает анимации даже в PlatformStand — замораживаем local ch = LocalPlayer.Character local hum = ch and ch:FindFirstChildOfClass("Humanoid") if hum then for _, tr in ipairs(hum:GetPlayingAnimationTracks()) do tr:AdjustSpeed(0) end end end) end local noclipConn do -- PhysicsService-группы сервер-only, поэтому чистый CanCollide=false каждый -- физический шаг по ВСЕМ потомкам персонажа (конечности в подпапке RigBody) local function applyNoclip() local ch = LocalPlayer.Character if not ch then return end for _, p in ipairs(ch:GetDescendants()) do if p:IsA("BasePart") then p.CanCollide = false end end end noclipConn = RunService.Stepped:Connect(function() if Noclip.Enabled then applyNoclip() end end) end local function noclipRestore() local ch = LocalPlayer.Character if not ch then return end for _, p in ipairs(ch:GetDescendants()) do if p:IsA("BasePart") then if p.Name == "HumanoidRootPart" or p.Name == "Head" or p.Name == "Body" or p.Name:find("Torso") then p.CanCollide = true end end end end local charConn = LocalPlayer.CharacterAdded:Connect(function() if Fly.Enabled then task.wait(0.5) flyStart() end end) -- // Цикл // local acc = 0 local hbConn = RunService.Heartbeat:Connect(function(dt) acc += dt if acc < 0.3 then return end acc = 0 for _, d in ipairs(workspace:GetDescendants()) do if d:IsA("Highlight") and d.Name ~= "ChamsV5" and d.Name:match("^Chams") then d:Destroy() end end refreshEnemies() refreshPlayers() refreshScrap() if Fullbright.Enabled then fullbrightApply() -- игра возвращает темноту событиями раунда end end) _G.CHAMS_SHUTDOWN = function() if hbConn then hbConn:Disconnect() end _G.CHAMS_GEN = (_G.CHAMS_GEN or 0) + 1 fullbrightOff() flyCleanup() noclipRestore() if noclipConn then noclipConn:Disconnect() end if charConn then charConn:Disconnect() end purgeOld() _G.CHAMS_SHUTDOWN = nil end -- // Menu // local screenGui = Instance.new("ScreenGui") screenGui.Name = "ChamsMenuV5" screenGui.ResetOnSpawn = false screenGui.Parent = LocalPlayer:WaitForChild("PlayerGui") local frame = Instance.new("Frame") frame.Size = UDim2.fromOffset(260, 908) frame.Position = UDim2.fromOffset(20, 20) frame.BackgroundColor3 = Color3.fromRGB(25, 25, 30) frame.BorderSizePixel = 0 frame.Active = true frame.Parent = screenGui Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 8) local dragBar = Instance.new("Frame") dragBar.Size = UDim2.new(1, 0, 0, 32) dragBar.BackgroundTransparency = 1 dragBar.Active = true dragBar.Parent = frame local title = Instance.new("TextLabel") title.Size = UDim2.new(1, 0, 0, 32) title.BackgroundTransparency = 1 title.Text = "Chams Menu ⠿" title.TextColor3 = Color3.fromRGB(255, 255, 255) title.Font = Enum.Font.GothamBold title.TextSize = 16 title.Parent = dragBar do local dragging, dragStart, startPos dragBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = frame.Position end end) UserInputService.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then local delta = input.Position - dragStart frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) end local GREEN = Color3.fromRGB(45, 120, 60) local RED = Color3.fromRGB(120, 45, 45) local function makeToggle(text, posY, initial, callback) local btn = Instance.new("TextButton") btn.Name = "Toggle" .. text:gsub("%s", "") btn.Size = UDim2.new(1, -24, 0, 30) btn.Position = UDim2.new(0, 12, 0, posY) btn.BorderSizePixel = 0 btn.Text = text .. (initial and ": ON" or ": OFF") btn.TextColor3 = Color3.fromRGB(255, 255, 255) btn.Font = Enum.Font.GothamBold btn.TextSize = 14 btn.BackgroundColor3 = initial and GREEN or RED btn.Parent = frame Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 6) local state = initial btn.MouseButton1Click:Connect(function() state = not state callback(state) btn.Text = text .. (state and ": ON" or ": OFF") btn.BackgroundColor3 = state and GREEN or RED end) return btn end local function setBtnState(btn, text, on) btn.Text = text .. (on and ": ON" or ": OFF") btn.BackgroundColor3 = on and GREEN or RED end local PALETTE = { Color3.fromRGB(255, 60, 0), Color3.fromRGB(255, 0, 0), Color3.fromRGB(255, 0, 255), Color3.fromRGB(255, 230, 0), Color3.fromRGB(0, 255, 0), Color3.fromRGB(0, 170, 255), Color3.fromRGB(0, 255, 255), Color3.fromRGB(170, 0, 255), } local function makePalette(posY, currentColor, onPick) local labels = {} local function redraw() for _, sw in ipairs(labels) do sw.BorderColor3 = sw.BackgroundColor3 == currentColor() and Color3.fromRGB(255, 255, 255) or Color3.fromRGB(60, 60, 70) end end for i, c in ipairs(PALETTE) do local sw = Instance.new("TextButton") sw.Size = UDim2.fromOffset(26, 22) sw.Position = UDim2.fromOffset(12 + (i - 1) * 29, posY) sw.BackgroundColor3 = c sw.BorderColor3 = Color3.fromRGB(60, 60, 70) sw.BorderSizePixel = 1 sw.Text = "" sw.AutoButtonColor = false sw.Parent = frame table.insert(labels, sw) sw.MouseButton1Click:Connect(function() onPick(c) redraw() end) end redraw() end local function makeSlider(posY, getT, setT, label, fmt) local lab = Instance.new("TextLabel") lab.Size = UDim2.new(1, -24, 0, 16) lab.Position = UDim2.new(0, 12, 0, posY) lab.BackgroundTransparency = 1 lab.TextColor3 = Color3.fromRGB(180, 180, 190) lab.Font = Enum.Font.Gotham lab.TextSize = 11 lab.Parent = frame local track = Instance.new("Frame") track.Size = UDim2.new(1, -24, 0, 6) track.Position = UDim2.new(0, 12, 0, posY + 18) track.BackgroundColor3 = Color3.fromRGB(60, 60, 70) track.BorderSizePixel = 0 track.Active = true track.Parent = frame local fill = Instance.new("Frame") fill.Size = UDim2.new(1 - getT(), 0, 1, 0) fill.BackgroundColor3 = Color3.fromRGB(0, 170, 255) fill.BorderSizePixel = 0 fill.Parent = track local function update() local frac = 1 - getT() fill.Size = UDim2.new(frac, 0, 1, 0) lab.Text = fmt and fmt(frac) or string.format((label or "Заливка") .. ": %d%%", math.round(frac * 100)) end update() local dragging = false local function setFromX(x) local a = math.clamp((x - track.AbsolutePosition.X) / track.AbsoluteSize.X, 0, 1) setT(1 - a) update() end track.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true setFromX(input.Position.X) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) UserInputService.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then setFromX(input.Position.X) end end) end local function sectionLabel(text, posY) local l = Instance.new("TextLabel") l.Size = UDim2.new(1, -24, 0, 16) l.Position = UDim2.new(0, 12, 0, posY) l.BackgroundTransparency = 1 l.Text = text l.TextColor3 = Color3.fromRGB(120, 120, 135) l.Font = Enum.Font.GothamBold l.TextSize = 12 l.TextXAlignment = Enum.TextXAlignment.Left l.Parent = frame end -- // Enemies // sectionLabel("ВРАГИ", 40) makeToggle("Enemies", 58, CONFIG.Enemies, function(on) CONFIG.Enemies = on eachEnemy(function(hl) hl.Enabled = on end) end) makePalette(94, function() return CONFIG.EnemyColor end, function(c) CONFIG.EnemyColor = c eachEnemy(function(hl) hl.FillColor = c end) end) makeSlider(122, function() return CONFIG.EnemyFillT end, function(t) CONFIG.EnemyFillT = t eachEnemy(function(hl) hl.FillTransparency = t end) end) -- // Players // sectionLabel("ИГРОКИ", 175) makeToggle("Players", 193, CONFIG.PlayersChams, function(on) CONFIG.PlayersChams = on eachPlayerHL(function(hl) hl.Enabled = on end) end) makePalette(229, function() return CONFIG.PlayerColor end, function(c) CONFIG.PlayerColor = c eachPlayerHL(function(hl) hl.FillColor = c end) end) makeSlider(257, function() return CONFIG.PlayerFillT end, function(t) CONFIG.PlayerFillT = t eachPlayerHL(function(hl) hl.FillTransparency = t end) end) -- // Scrap // sectionLabel("СКРАП", 310) makeToggle("Scrap", 328, CONFIG.Scrap, function(on) CONFIG.Scrap = on eachScrapHL(function(hl) hl.Enabled = on end) end) makePalette(364, function() return CONFIG.ScrapColor end, function(c) CONFIG.ScrapColor = c eachScrapHL(function(hl) hl.FillColor = c end) end) makeSlider(392, function() return CONFIG.ScrapFillT end, function(t) CONFIG.ScrapFillT = t eachScrapHL(function(hl) hl.FillTransparency = t end) end) -- // AutoFarm // sectionLabel("АВТОФАРМ СКРАПА", 440) local cfBtn = nil -- вперёд-объявление для взаимоисключения фермов local afBtn = makeToggle("AutoFarm", 458, false, function(on) AutoFarm.Enabled = on if on then AutoFarm.Status = "запуск..." CaptureFarm.Enabled = false if cfBtn then setBtnState(cfBtn, "Capture", false) end else AutoFarm.Status = "выключен, возврат на карту..." task.spawn(function() local ok = teleportToSafeMapSpot() AutoFarm.Status = ok and "выключен (возврат выполнен)" or "выключен (безопасная точка не найдена)" end) end end) local afStatus = Instance.new("TextLabel") afStatus.Size = UDim2.new(1, -24, 0, 44) afStatus.Position = UDim2.new(0, 12, 0, 494) afStatus.BackgroundColor3 = Color3.fromRGB(35, 35, 42) afStatus.BorderSizePixel = 0 afStatus.Text = "выключен" afStatus.TextColor3 = Color3.fromRGB(200, 200, 210) afStatus.Font = Enum.Font.Gotham afStatus.TextSize = 11 afStatus.TextWrapped = true afStatus.Parent = frame Instance.new("UICorner", afStatus).CornerRadius = UDim.new(0, 6) AutoFarm.Label = afStatus -- // Fullbright // sectionLabel("ОСВЕЩЕНИЕ", 552) makeToggle("Fullbright", 570, false, function(on) Fullbright.Enabled = on if on then fullbrightOn() else fullbrightOff() end end) -- // CaptureFarm // sectionLabel("ЗАХВАТ ТОЧЕК", 614) cfBtn = makeToggle("Capture", 632, false, function(on) CaptureFarm.Enabled = on if on then CaptureFarm.Status = "запуск..." AutoFarm.Enabled = false setBtnState(afBtn, "AutoFarm", false) else CaptureFarm.Status = "выключен, возврат на карту..." task.spawn(function() local ok = teleportToSafeMapSpot() CaptureFarm.Status = ok and "выключен (возврат выполнен)" or "выключен (точка не найдена)" end) end end) local capStatus = Instance.new("TextLabel") capStatus.Size = UDim2.new(1, -24, 0, 44) capStatus.Position = UDim2.new(0, 12, 0, 670) capStatus.BackgroundColor3 = Color3.fromRGB(35, 35, 42) capStatus.BorderSizePixel = 0 capStatus.Text = "выключен" capStatus.TextColor3 = Color3.fromRGB(200, 200, 210) capStatus.Font = Enum.Font.Gotham capStatus.TextSize = 11 capStatus.TextWrapped = true capStatus.Parent = frame Instance.new("UICorner", capStatus).CornerRadius = UDim.new(0, 6) CaptureFarm.Label = capStatus -- // Движение: Noclip + Fly // sectionLabel("ДВИЖЕНИЕ", 726) makeToggle("Noclip", 744, false, function(on) Noclip.Enabled = on if not on then noclipRestore() end end) makeToggle("Fly", 782, false, function(on) Fly.Enabled = on if on then flyStart() else flyCleanup() end end) makeSlider(820, function() return 1 - (Fly.Speed - 20) / 180 end, function(t) Fly.Speed = 20 + (1 - t) * 180 end, nil, function(frac) return string.format("Скорость полёта: %d", math.round(20 + frac * 180)) end ) -- // Unload // local unload = Instance.new("TextButton") unload.Size = UDim2.new(1, -24, 0, 28) unload.Position = UDim2.new(0, 12, 0, 868) unload.BackgroundColor3 = Color3.fromRGB(60, 45, 45) unload.BorderSizePixel = 0 unload.Text = "Unload" unload.TextColor3 = Color3.fromRGB(255, 255, 255) unload.Font = Enum.Font.Gotham unload.TextSize = 13 unload.Parent = frame Instance.new("UICorner", unload).CornerRadius = UDim.new(0, 6) unload.MouseButton1Click:Connect(function() if _G.CHAMS_SHUTDOWN then _G.CHAMS_SHUTDOWN() end screenGui:Destroy() end) UserInputService.InputBegan:Connect(function(input, processed) if processed then return end if input.KeyCode == Enum.KeyCode.RightShift or input.KeyCode == Enum.KeyCode.K then frame.Visible = not frame.Visible end end)