local Players = game:GetService("Players") local Workspace = game:GetService("Workspace") local RunService = game:GetService("RunService") local ProximityPromptService = game:GetService("ProximityPromptService") local VirtualUser = game:GetService("VirtualUser") local TweenService = game:GetService("TweenService") local UserInputService = game:GetService("UserInputService") local player = Players.LocalPlayer -- ================= НАСТРОЙКИ ================= local FLY_TO_ITEM_SPEED = 100 local ESP_COLOR = Color3.fromRGB(255, 120, 0) local KEYWORDS = {"door", "pumpkin", "halloween", "trick", "treat"} local BOUNCE_POWER = 130 -- Сила отскока (сделал чуть больше) -- ================= ЦВЕТА ================= local Theme = { Background = Color3.fromRGB(15, 15, 20), Secondary = Color3.fromRGB(25, 25, 35), Accent = Color3.fromRGB(255, 120, 0), AccentDark = Color3.fromRGB(200, 80, 0), Purple = Color3.fromRGB(150, 50, 255), Text = Color3.fromRGB(255, 255, 255), Success = Color3.fromRGB(0, 200, 100), Danger = Color3.fromRGB(255, 50, 50), Event = Color3.fromRGB(255, 200, 0) } -- ================= СОСТОЯНИЯ ================= local isESPEnabled = false local isInstantEnabled = false local isAntiAfkEnabled = false local isFreeFlyEnabled = false local isRagdollBounceEnabled = false local isMinimized = false local freeFlySpeed = 100 local isScriptActive = true local activeESP = {} local activeConnections = {} local flyGyro = nil local ragdollBounceConn = nil local espAddedConnection = nil local voidObjects = {} local eventEndTime = 0 local lastEventText = "" -- ================= БАЗОВЫЙ GUI ================= local screenGui = Instance.new("ScreenGui") screenGui.Name = "JJS_Premium_Hub_v35" screenGui.ResetOnSpawn = false screenGui.Parent = player:WaitForChild("PlayerGui") local main = Instance.new("Frame") main.AnchorPoint = Vector2.new(0.5, 0.5) main.Position = UDim2.new(0.5, 0, 0.5, 0) main.Size = UDim2.new(0, 0, 0, 0) main.BackgroundColor3 = Theme.Background main.BorderSizePixel = 0 main.Active = true main.Draggable = true main.ClipsDescendants = true main.Parent = screenGui Instance.new("UICorner", main).CornerRadius = UDim.new(0, 12) local stroke = Instance.new("UIStroke", main) stroke.Color = Theme.Purple stroke.Thickness = 1.5 stroke.Transparency = 0.3 TweenService:Create(main, TweenInfo.new(0.4, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Size = UDim2.new(0, 260, 0, 475)}):Play() local topBar = Instance.new("Frame") topBar.Size = UDim2.new(1, 0, 0, 45) topBar.BackgroundColor3 = Theme.Secondary topBar.BorderSizePixel = 0 topBar.Parent = main local title = Instance.new("TextLabel") title.Size = UDim2.new(1, -80, 1, 0) title.Position = UDim2.new(0, 15, 0, 0) title.BackgroundTransparency = 1 title.Text = "🎃 JJS Hub | v35" title.TextColor3 = Theme.Text title.Font = Enum.Font.GothamBold title.TextSize = 15 title.TextXAlignment = Enum.TextXAlignment.Left title.Parent = topBar local minBtn = Instance.new("TextButton") minBtn.Size = UDim2.new(0, 30, 0, 30) minBtn.Position = UDim2.new(1, -70, 0, 7) minBtn.BackgroundColor3 = Theme.Accent minBtn.Text = "—" minBtn.TextColor3 = Theme.Text minBtn.Font = Enum.Font.GothamBold minBtn.TextSize = 16 minBtn.Parent = topBar Instance.new("UICorner", minBtn).CornerRadius = UDim.new(0, 6) local closeBtn = Instance.new("TextButton") closeBtn.Size = UDim2.new(0, 30, 0, 30) closeBtn.Position = UDim2.new(1, -35, 0, 7) closeBtn.BackgroundColor3 = Theme.Danger closeBtn.Text = "✕" closeBtn.TextColor3 = Theme.Text closeBtn.Font = Enum.Font.GothamBold closeBtn.TextSize = 14 closeBtn.Parent = topBar Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(0, 6) local eventLabel = Instance.new("TextLabel") eventLabel.Size = UDim2.new(1, -20, 0, 25) eventLabel.Position = UDim2.new(0, 10, 0, 45) eventLabel.BackgroundTransparency = 1 eventLabel.Text = "📅 Эвент: Ожидание..." eventLabel.TextColor3 = Theme.Event eventLabel.Font = Enum.Font.GothamBold eventLabel.TextSize = 13 eventLabel.TextXAlignment = Enum.TextXAlignment.Center eventLabel.Parent = main local scroll = Instance.new("ScrollingFrame") scroll.Size = UDim2.new(1, -20, 1, -85) scroll.Position = UDim2.new(0, 10, 0, 75) scroll.BackgroundTransparency = 1 scroll.ScrollBarThickness = 2 scroll.ScrollBarImageColor3 = Theme.Accent scroll.CanvasSize = UDim2.new(0, 0, 0, 470) scroll.Parent = main local layout = Instance.new("UIListLayout") layout.Padding = UDim.new(0, 8) layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Parent = scroll -- ================= ЭЛЕМЕНТЫ UI ================= local function createActionButton(text, icon, order, color) local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, 0, 0, 40) btn.BackgroundColor3 = color or Theme.Accent btn.Text = "" btn.LayoutOrder = order btn.Parent = scroll Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 8) local grad = Instance.new("UIGradient") grad.Color = ColorSequence.new({ColorSequenceKeypoint.new(0, color or Theme.Accent), ColorSequenceKeypoint.new(1, Theme.AccentDark)}) grad.Rotation = 90 grad.Parent = btn local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, -10, 1, 0) lbl.Position = UDim2.new(0, 10, 0, 0) lbl.BackgroundTransparency = 1 lbl.Text = icon .. " " .. text lbl.TextColor3 = Theme.Text lbl.Font = Enum.Font.GothamBold lbl.TextSize = 14 lbl.Parent = btn btn.MouseEnter:Connect(function() TweenService:Create(btn, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(255, 150, 50)}):Play() end) btn.MouseLeave:Connect(function() TweenService:Create(btn, TweenInfo.new(0.2), {BackgroundColor3 = color or Theme.Accent}):Play() end) return btn end local function createToggle(text, initialColor, order, callback) local container = Instance.new("Frame") container.Size = UDim2.new(1, 0, 0, 45) container.BackgroundColor3 = Theme.Secondary container.LayoutOrder = order container.Parent = scroll Instance.new("UICorner", container).CornerRadius = UDim.new(0, 8) local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(0.7, 0, 1, 0) lbl.Position = UDim2.new(0, 12, 0, 0) lbl.BackgroundTransparency = 1 lbl.Text = text lbl.TextColor3 = Theme.Text lbl.Font = Enum.Font.GothamMedium lbl.TextSize = 13 lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Parent = container local switchBg = Instance.new("Frame") switchBg.Size = UDim2.new(0, 40, 0, 20) switchBg.Position = UDim2.new(1, -52, 0.5, -10) switchBg.BackgroundColor3 = Color3.fromRGB(50, 50, 60) switchBg.Parent = container Instance.new("UICorner", switchBg).CornerRadius = UDim.new(1, 0) local knob = Instance.new("Frame") knob.Size = UDim2.new(0, 16, 0, 16) knob.Position = UDim2.new(0, 2, 0.5, -8) knob.BackgroundColor3 = Theme.Text knob.Parent = switchBg Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0) local isToggled = false local clickBtn = Instance.new("TextButton") clickBtn.Size = UDim2.new(1, 0, 1, 0) clickBtn.BackgroundTransparency = 1 clickBtn.Text = "" clickBtn.Parent = container clickBtn.MouseButton1Click:Connect(function() isToggled = not isToggled if isToggled then TweenService:Create(switchBg, TweenInfo.new(0.2), {BackgroundColor3 = initialColor}):Play() TweenService:Create(knob, TweenInfo.new(0.2), {Position = UDim2.new(0, 22, 0.5, -8)}):Play() else TweenService:Create(switchBg, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(50, 50, 60)}):Play() TweenService:Create(knob, TweenInfo.new(0.2), {Position = UDim2.new(0, 2, 0.5, -8)}):Play() end callback(isToggled) end) end local function createFlyToggle(text, order, callback) local container = Instance.new("Frame") container.Size = UDim2.new(1, 0, 0, 45) container.BackgroundColor3 = Theme.Secondary container.LayoutOrder = order container.Parent = scroll Instance.new("UICorner", container).CornerRadius = UDim.new(0, 8) local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(0.5, 0, 1, 0) lbl.Position = UDim2.new(0, 12, 0, 0) lbl.BackgroundTransparency = 1 lbl.Text = text lbl.TextColor3 = Theme.Text lbl.Font = Enum.Font.GothamMedium lbl.TextSize = 13 lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Parent = container local clickBtn = Instance.new("TextButton") clickBtn.Size = UDim2.new(1, 0, 1, 0) clickBtn.BackgroundTransparency = 1 clickBtn.Text = "" clickBtn.ZIndex = 1 clickBtn.Parent = container local speedBox = Instance.new("TextBox") speedBox.Size = UDim2.new(0, 40, 0, 24) speedBox.Position = UDim2.new(1, -100, 0.5, -12) speedBox.BackgroundColor3 = Theme.Background speedBox.Text = "100" speedBox.TextColor3 = Theme.Accent speedBox.Font = Enum.Font.GothamBold speedBox.TextSize = 12 speedBox.ZIndex = 2 speedBox.Parent = container Instance.new("UICorner", speedBox).CornerRadius = UDim.new(0, 4) speedBox.FocusLost:Connect(function() local num = tonumber(speedBox.Text) if num and num > 0 then freeFlySpeed = num else speedBox.Text = tostring(freeFlySpeed) end end) local switchBg = Instance.new("Frame") switchBg.Size = UDim2.new(0, 40, 0, 20) switchBg.Position = UDim2.new(1, -52, 0.5, -10) switchBg.BackgroundColor3 = Color3.fromRGB(50, 50, 60) switchBg.ZIndex = 2 switchBg.Parent = container Instance.new("UICorner", switchBg).CornerRadius = UDim.new(1, 0) local knob = Instance.new("Frame") knob.Size = UDim2.new(0, 16, 0, 16) knob.Position = UDim2.new(0, 2, 0.5, -8) knob.BackgroundColor3 = Theme.Text knob.ZIndex = 3 knob.Parent = switchBg Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0) local isToggled = false clickBtn.MouseButton1Click:Connect(function() isToggled = not isToggled if isToggled then TweenService:Create(switchBg, TweenInfo.new(0.2), {BackgroundColor3 = Theme.Accent}):Play() TweenService:Create(knob, TweenInfo.new(0.2), {Position = UDim2.new(0, 22, 0.5, -8)}):Play() lbl.TextColor3 = Theme.Accent else TweenService:Create(switchBg, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(50, 50, 60)}):Play() TweenService:Create(knob, TweenInfo.new(0.2), {Position = UDim2.new(0, 2, 0.5, -8)}):Play() lbl.TextColor3 = Theme.Text end callback(isToggled) end) end -- ================= СОЗДАНИЕ ЭЛЕМЕНТОВ ================= local flyBtn = createActionButton("Лететь к предмету", "🚀", 1) createToggle("VBESP (Визуал пустоты)", Theme.Purple, 2, function(state) toggleVBESP(state) end) createToggle("ESP Дверей (Хэллоуин)", Theme.Purple, 3, function(state) toggleESP(state) end) createToggle("Мгновенный сбор (Instant)", Theme.Success, 4, function(state) toggleInstantLogic(state) end) createFlyToggle("Свободный полёт", 5, function(state) toggleFreeFly(state) end) createToggle("🧟 Рагдолл-Отскок", Theme.Success, 6, function(state) toggleRagdollBounce(state) end) createToggle("Защита от АФК (Anti-AFK)", Theme.Danger, 7, function(state) toggleAntiAfkLogic(state) end) -- ================= ЛОГИКА: СВОРАЧИВАНИЕ ================= minBtn.MouseButton1Click:Connect(function() isMinimized = not isMinimized if isMinimized then TweenService:Create(main, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Size = UDim2.new(0, 260, 0, 45)}):Play() scroll.Visible = false eventLabel.Visible = false minBtn.Text = "+" else TweenService:Create(main, TweenInfo.new(0.3, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Size = UDim2.new(0, 260, 0, 475)}):Play() scroll.Visible = true eventLabel.Visible = true minBtn.Text = "—" end end) -- ================= ИДЕАЛЬНЫЙ ТАЙМЕР ЭВЕНТА ================= task.spawn(function() while isScriptActive do task.wait(0.1) local foundText = false for _, gui in ipairs(player.PlayerGui:GetDescendants()) do if gui:IsA("TextLabel") and gui.Text ~= "" and gui ~= eventLabel then local lowerText = string.lower(gui.Text) if string.find(lowerText, "event is starting in") or string.find(lowerText, "event starts in") then foundText = true if gui.Text ~= lastEventText then lastEventText = gui.Text local match = string.match(gui.Text, "(%d+)") if match then eventEndTime = tick() + tonumber(match) end end break elseif string.find(lowerText, "event has started") or string.find(lowerText, "event started") then foundText = true if gui.Text ~= lastEventText then lastEventText = gui.Text eventEndTime = tick() - 1 end break end end end if not foundText then lastEventText = "" end end end) RunService.RenderStepped:Connect(function() local timeLeft = eventEndTime - tick() if timeLeft > 0 then eventLabel.Text = "📅 Эвент через: " .. math.ceil(timeLeft) .. " сек." eventLabel.TextColor3 = Theme.Danger elseif timeLeft > -3 then eventLabel.Text = "📅 Эвент: НАЧАЛСЯ!" eventLabel.TextColor3 = Theme.Success else eventLabel.Text = "📅 Эвент: Ожидание..." eventLabel.TextColor3 = Theme.Event end end) -- ================= ЛОГИКА: РАГДОЛЛ-ОТСКОК (ИСПРАВЛЕННЫЙ) ================= function toggleRagdollBounce(state) isRagdollBounceEnabled = state local char = player.Character local root = char and char:FindFirstChild("HumanoidRootPart") local humanoid = char and char:FindFirstChild("Humanoid") if not root or not humanoid then return end if isRagdollBounceEnabled then if isFreeFlyEnabled then toggleFreeFly(false) end humanoid.PlatformStand = true if ragdollBounceConn then ragdollBounceConn:Disconnect() end ragdollBounceConn = RunService.Heartbeat:Connect(function() if not isRagdollBounceEnabled or not root or not root.Parent then return end -- Проверяем землю через луч (Raycast) вниз local params = RaycastParams.new() params.FilterDescendantsInstances = {char} params.FilterType = Enum.RaycastFilterType.Exclude local rayResult = Workspace:Raycast(root.Position, Vector3.new(0, -6, 0), params) local isOnGround = rayResult and rayResult.Distance <= 3 -- 1. ФИЗИЧЕСКИЙ ОТСКОК if isOnGround and root.AssemblyLinearVelocity.Y <= 5 then root.AssemblyLinearVelocity = Vector3.new( root.AssemblyLinearVelocity.X, BOUNCE_POWER, root.AssemblyLinearVelocity.Z ) end -- 2. УПРАВЛЕНИЕ WASD (Только в воздухе, чтобы не было скольжения по полу) if not isOnGround then local moveDir = humanoid.MoveDirection if moveDir.Magnitude > 0 then local camera = Workspace.CurrentCamera local camCF = camera.CFrame local relativeMove = camCF:VectorToObjectSpace(moveDir) local moveVector = (camCF.LookVector * -relativeMove.Z) + (camCF.RightVector * relativeMove.X) local currentVel = root.AssemblyLinearVelocity root.AssemblyLinearVelocity = Vector3.new( currentVel.X + (moveVector.X * 8), currentVel.Y, currentVel.Z + (moveVector.Z * 8) ) end end end) else if ragdollBounceConn then ragdollBounceConn:Disconnect() ragdollBounceConn = nil end if humanoid then humanoid.PlatformStand = false end end end -- ================= ЛОГИКА: VBESP ================= function toggleVBESP(state) if state then local floor = Instance.new("Part") floor.Name = "VoidFloor" floor.Size = Vector3.new(16, 1, 16) floor.Position = Vector3.new(0, 500, 0) floor.Anchored = true floor.CanCollide = true floor.Material = Enum.Material.Neon floor.Color = Theme.Purple floor.Transparency = 0.3 floor.Parent = Workspace table.insert(voidObjects, floor) local wall = Instance.new("Part") wall.Name = "VoidWall" wall.Size = Vector3.new(16, 15, 1) wall.Position = Vector3.new(0, 507, -8.5) wall.Anchored = true wall.CanCollide = true wall.Material = Enum.Material.Neon wall.Color = Theme.Purple wall.Transparency = 0.3 wall.Parent = Workspace table.insert(voidObjects, wall) local bb = Instance.new("BillboardGui") bb.Size = UDim2.new(0, 200, 0, 50) bb.StudsOffset = Vector3.new(0, 3, 0) bb.AlwaysOnTop = true bb.Parent = floor local txt = Instance.new("TextLabel") txt.Size = UDim2.new(1, 0, 1, 0) txt.BackgroundTransparency = 1 txt.Text = "🌌 Void Platform\nЛети сюда через Fly" txt.TextColor3 = Color3.fromRGB(255, 255, 255) txt.TextStrokeTransparency = 0 txt.Font = Enum.Font.GothamBold txt.TextScaled = true txt.Parent = bb local highlight = Instance.new("Highlight") highlight.FillColor = Theme.Purple highlight.OutlineColor = Color3.new(1, 1, 1) highlight.FillTransparency = 0.5 highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop highlight.Parent = floor table.insert(voidObjects, highlight) local highlight2 = Instance.new("Highlight") highlight2.FillColor = Theme.Purple highlight2.OutlineColor = Color3.new(1, 1, 1) highlight2.FillTransparency = 0.5 highlight2.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop highlight2.Parent = wall table.insert(voidObjects, highlight2) else for _, obj in ipairs(voidObjects) do if obj then obj:Destroy() end end voidObjects = {} end end -- ================= ЛОГИКА: ПОЛЁТ К ПРЕДМЕТУ ================= local isFlyingToItem = false local flyConnection = nil flyBtn.MouseButton1Click:Connect(function() if isFlyingToItem then return end local char = player.Character local root = char and char:FindFirstChild("HumanoidRootPart") local humanoid = char and char:FindFirstChild("Humanoid") if not root or not humanoid then return end humanoid.PlatformStand = false root.CanCollide = true if isRagdollBounceEnabled then toggleRagdollBounce(false) end local targetPos = nil local shortestDist = 1000 for _, obj in ipairs(Workspace:GetDescendants()) do if not obj:IsA("BasePart") or obj.Anchored or obj:IsDescendantOf(char) then continue end if obj.Transparency > 0.1 or obj.Size.Magnitude > 50 then continue end if obj.Name == "VoidFloor" or obj.Name == "VoidWall" then continue end local n = string.lower(obj.Name) if string.find(n, "finger") or string.find(n, "hand") or string.find(n, "arm") then continue end local dist = (obj.Position - root.Position).Magnitude if dist < shortestDist then shortestDist = dist targetPos = obj.Position end end if targetPos then isFlyingToItem = true flyBtn.Text = "Летим..." if flyConnection then flyConnection:Disconnect() end flyConnection = RunService.RenderStepped:Connect(function(dt) if not root or not root.Parent then return end local direction = (targetPos - root.Position) local distance = direction.Magnitude if distance > 3 then local moveStep = direction.Unit * (FLY_TO_ITEM_SPEED * dt) if moveStep.Magnitude > distance then moveStep = direction end root.CFrame = root.CFrame + moveStep else if flyConnection then flyConnection:Disconnect() end isFlyingToItem = false flyBtn.Text = "🚀 Лететь к предмету" end end) else flyBtn.Text = "❌ Предметы не найдены!" task.wait(1.5) if not isFlyingToItem then flyBtn.Text = "🚀 Лететь к предмету" end end end) -- ================= ЛОГИКА: УНИВЕРСАЛЬНЫЙ ПОЛЁТ (FLY) ================= function toggleFreeFly(state) isFreeFlyEnabled = state local char = player.Character if not char then return end local root = char:FindFirstChild("HumanoidRootPart") local humanoid = char:FindFirstChild("Humanoid") if not root or not humanoid then return end if isFreeFlyEnabled then if isRagdollBounceEnabled then toggleRagdollBounce(false) end humanoid.PlatformStand = true root.CanCollide = false if flyGyro then flyGyro:Destroy() end flyGyro = Instance.new("AlignOrientation") flyGyro.MaxTorque = math.huge flyGyro.Responsiveness = 100 flyGyro.Parent = root local att = Instance.new("Attachment", root) flyGyro.Attachment0 = att local vel = Instance.new("LinearVelocity") vel.Name = "FreeFlyVelocity" vel.MaxForce = math.huge vel.VectorVelocity = Vector3.new(0, 0, 0) vel.Parent = root vel.Attachment0 = att activeConnections["FreeFlyVel"] = vel activeConnections["FreeFlyLoop"] = RunService.RenderStepped:Connect(function(dt) if not isFreeFlyEnabled or not root or not root.Parent then return end if UserInputService:GetFocusedTextBox() then return end local camera = Workspace.CurrentCamera local camCF = camera.CFrame local moveDir = humanoid.MoveDirection local relativeMove = camCF:VectorToObjectSpace(moveDir) local flyVector = (camCF.LookVector * -relativeMove.Z) + (camCF.RightVector * relativeMove.X) if UserInputService:IsKeyDown(Enum.KeyCode.Space) then flyVector += Vector3.new(0, 1, 0) end if UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) then flyVector -= Vector3.new(0, 1, 0) end if flyVector.Magnitude > 0 then vel.VectorVelocity = flyVector.Unit * freeFlySpeed else vel.VectorVelocity = Vector3.new(0, 0, 0) end flyGyro.CFrame = CFrame.new(root.Position, root.Position + camCF.LookVector) end) else humanoid.PlatformStand = false root.CanCollide = true if flyGyro then flyGyro:Destroy() flyGyro = nil end if activeConnections["FreeFlyVel"] then activeConnections["FreeFlyVel"]:Destroy() activeConnections["FreeFlyVel"] = nil end if activeConnections["FreeFlyLoop"] then activeConnections["FreeFlyLoop"]:Disconnect() activeConnections["FreeFlyLoop"] = nil end end end -- ================= ЛОГИКА: ОПТИМИЗИРОВАННЫЙ ESP ДВЕРЕЙ ================= local function isHalloweenDoor(obj) if not obj:IsA("BasePart") or obj.Anchored then return false end local lowerName = string.lower(obj.Name) for _, keyword in ipairs(KEYWORDS) do if string.find(lowerName, keyword) then return true end end local model = obj:FindFirstAncestorOfClass("Model") if model then local lowerModelName = string.lower(model.Name) for _, keyword in ipairs(KEYWORDS) do if string.find(lowerModelName, keyword) then return true end end end return false end local function addESPModel(model) if activeESP[model] then return end local attachTo = model:IsA("Model") and (model.PrimaryPart or model:FindFirstChildWhichIsA("BasePart")) or model if not attachTo then return end local billboard = Instance.new("BillboardGui") billboard.Size = UDim2.new(0, 160, 0, 35) billboard.StudsOffset = Vector3.new(0, 3, 0) billboard.AlwaysOnTop = true billboard.Parent = attachTo local label = Instance.new("TextLabel") label.Size = UDim2.new(1, 0, 1, 0) label.BackgroundTransparency = 1 label.Text = "🎃 Дверь" label.TextColor3 = ESP_COLOR label.TextStrokeTransparency = 0 label.Font = Enum.Font.GothamBold label.TextScaled = true label.Parent = billboard local highlight = Instance.new("Highlight") highlight.FillColor = ESP_COLOR highlight.OutlineColor = Color3.new(1, 1, 1) highlight.FillTransparency = 0.5 highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop highlight.Parent = model activeESP[model] = {highlight = highlight, billboard = billboard, label = label, part = attachTo} end function toggleESP(state) isESPEnabled = state if state then for _, obj in ipairs(Workspace:GetDescendants()) do if isHalloweenDoor(obj) then local model = obj:FindFirstAncestorOfClass("Model") or obj addESPModel(model) end end if espAddedConnection then espAddedConnection:Disconnect() end espAddedConnection = Workspace.DescendantAdded:Connect(function(obj) if isESPEnabled and isHalloweenDoor(obj) then local model = obj:FindFirstAncestorOfClass("Model") or obj addESPModel(model) end end) else if espAddedConnection then espAddedConnection:Disconnect() espAddedConnection = nil end for model, data in pairs(activeESP) do if data.highlight then data.highlight:Destroy() end if data.billboard then data.billboard:Destroy() end end activeESP = {} end end -- ================= ЛОГИКА: INSTANT & ANTI-AFK ================= function toggleInstantLogic(state) isInstantEnabled = state if state then for _, desc in ipairs(workspace:GetDescendants()) do if desc:IsA("ProximityPrompt") then desc.HoldDuration = 0; desc.RequiresLineOfSight = false end end if promptConnection then promptConnection:Disconnect() end promptConnection = ProximityPromptService.PromptButtonHoldBegan:Connect(function(prompt) if isInstantEnabled and isScriptActive then pcall(function() fireproximityprompt(prompt) end) end end) else if promptConnection then promptConnection:Disconnect() end end end function toggleAntiAfkLogic(state) isAntiAfkEnabled = state if isAntiAfkEnabled then if afkConnection then afkConnection:Disconnect() end afkConnection = player.Idled:Connect(function() if isAntiAfkEnabled and isScriptActive then VirtualUser:CaptureController() VirtualUser:ClickButton2(Vector2.new()) end end) else if afkConnection then afkConnection:Disconnect() end end end -- ================= ОПТИМИЗИРОВАННЫЙ ТАЙМЕР ДВЕРЕЙ ================= task.spawn(function() while isScriptActive do task.wait(0.3) if isESPEnabled then local char = player.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") for model, data in pairs(activeESP) do if not model.Parent then data.highlight:Destroy() data.billboard:Destroy() activeESP[model] = nil elseif data.label and data.part and data.part.Parent then local dist = 0 if hrp then dist = math.floor((data.part.Position - hrp.Position).Magnitude) end local hasPrompt = model:FindFirstChildWhichIsA("ProximityPrompt", true) local hasClick = model:FindFirstChildWhichIsA("ClickDetector", true) local isInteractable = (hasPrompt and hasPrompt.Enabled) or hasClick local gameTimerText = nil for _, desc in ipairs(model:GetChildren()) do if desc:IsA("BillboardGui") or desc:IsA("SurfaceGui") then local txt = desc:FindFirstChildWhichIsA("TextLabel", true) if txt then local match = string.match(txt.Text, "%d+:%d+") if match then gameTimerText = match break end end end end if gameTimerText then data.label.Text = string.format("🔒 %s\nДист: %d", gameTimerText, dist) data.label.TextColor3 = Theme.Danger elseif not isInteractable and (hasPrompt or hasClick) then data.label.Text = string.format("🔒 Закрыто\nДист: %d", dist) data.label.TextColor3 = Color3.fromRGB(255, 100, 50) else data.label.Text = string.format("✅ Открыто\nДист: %d", dist) data.label.TextColor3 = Theme.Success end end end end end end) -- ================= ГЛОБАЛЬНОЕ ЗАКРЫТИЕ ================= closeBtn.MouseButton1Click:Connect(function() isScriptActive = false isESPEnabled = false isInstantEnabled = false isAntiAfkEnabled = false if isFreeFlyEnabled then toggleFreeFly(false) end if isRagdollBounceEnabled then toggleRagdollBounce(false) end if flyConnection then flyConnection:Disconnect() end if promptConnection then promptConnection:Disconnect() end if afkConnection then afkConnection:Disconnect() end if espAddedConnection then espAddedConnection:Disconnect() end if activeConnections["FreeFlyLoop"] then activeConnections["FreeFlyLoop"]:Disconnect() end if activeConnections["FreeFlyVel"] then activeConnections["FreeFlyVel"]:Destroy() end if ragdollBounceConn then ragdollBounceConn:Disconnect() end for _, obj in ipairs(voidObjects) do if obj then obj:Destroy() end end for model, data in pairs(activeESP) do if data.highlight then data.highlight:Destroy() end if data.billboard then data.billboard:Destroy() end end activeESP = {} local closeTween = TweenService:Create(main, TweenInfo.new(0.3, Enum.EasingStyle.Back, Enum.EasingDirection.In), {Size = UDim2.new(0, 0, 0, 0)}) closeTween:Play() closeTween.Completed:Wait() screenGui:Destroy() print("[JJS Hub] Скрипт полностью выключен и очищен.") end)