Pyro Panel For
Key Required

Pyro Panel For

Pyro Playground 💥 [UPDATE]PlanoPlano 1.6K views 1.3K executesUpdated Sep 20, 2026
Unrated
00
Lua Script•502 lines (17883 chars)
--[[
	Holographic Matrix | Pyro Panel (REBORN) v4.4
	Bulletproof Anti-Crash Loop & Strict ScrollingFrame VIP Filter
]]

local CoreGui = game:GetService("CoreGui")
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local SoundService = game:GetService("SoundService")
local Workspace = game:GetService("Workspace")

local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")

-- Safely assign parent using gethui or fallback
local TargetParent = PlayerGui
if gethui then TargetParent = gethui() elseif CoreGui then TargetParent = CoreGui end

pcall(function()
	if TargetParent:FindFirstChild("PyroLiteGui") then TargetParent.PyroLiteGui:Destroy() end
end)

local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "PyroLiteGui"
ScreenGui.ResetOnSpawn = false
ScreenGui.DisplayOrder = 999999
ScreenGui.Parent = TargetParent

-- Sounds
local SettingsBGM = Instance.new("Sound", SoundService)
SettingsBGM.SoundId = "rbxassetid://9043887091"
SettingsBGM.Volume = 0.5
SettingsBGM.Looped = true

local ClickSFX = Instance.new("Sound", SoundService)
ClickSFX.SoundId = "rbxassetid://6895079853"
ClickSFX.Volume = 0.6

---------------------------------------------------------
-- FULLSCREEN SYSTEM SETTINGS OVERLAY
---------------------------------------------------------
local SettingsOverlay = Instance.new("Frame", ScreenGui)
SettingsOverlay.Size = UDim2.new(1, 0, 1, 0)
SettingsOverlay.BackgroundColor3 = Color3.fromRGB(10, 40, 65)
SettingsOverlay.BackgroundTransparency = 0.1
SettingsOverlay.ClipsDescendants = true
SettingsOverlay.Visible = false
SettingsOverlay.ZIndex = 300

local SettingsGradient = Instance.new("UIGradient", SettingsOverlay)
SettingsGradient.Color = ColorSequence.new({
	ColorSequenceKeypoint.new(0, Color3.fromRGB(80, 200, 240)),
	ColorSequenceKeypoint.new(1, Color3.fromRGB(5, 25, 45))
})

-- Gear Animations
local Gear1 = Instance.new("TextLabel", SettingsOverlay)
Gear1.Size = UDim2.new(0, 80, 0, 80)
Gear1.Position = UDim2.new(0.05, 0, 0.1, 0)
Gear1.BackgroundTransparency = 1
Gear1.Text = "⚙️"
Gear1.TextSize = 60
Gear1.ZIndex = 301

task.spawn(function()
	local rot = 0
	while true do
		rot = (rot + 2) % 360
		Gear1.Rotation = rot
		task.wait(0.03)
	end
end)

-- Flying Real Roblox Avatars
local avatarUserIds = {63733005, 2, 1, 156}
task.spawn(function()
	while true do
		if SettingsOverlay.Visible then
			local flyer = Instance.new("ImageLabel", SettingsOverlay)
			flyer.Size = UDim2.new(0, 48, 0, 48)
			flyer.BackgroundTransparency = 1
			flyer.Image = "rbxthumb://type=AvatarHeadShot&id=" .. avatarUserIds[math.random(1, #avatarUserIds)] .. "&w=150&h=150"
			flyer.ZIndex = 301
			flyer.Position = UDim2.new(math.random(), 0, 1.1, 0)
			
			Instance.new("UICorner", flyer).CornerRadius = UDim.new(1, 0)
			
			local tween = TweenService:Create(flyer, TweenInfo.new(math.random(4, 7), Enum.EasingStyle.Linear), {
				Position = UDim2.new(math.random(), 0, -0.15, 0),
				Rotation = math.random(-90, 90)
			})
			tween:Play()
			tween.Completed:Connect(function() flyer:Destroy() end)
		end
		task.wait(1.2)
	end
end)

local SettingsTitle = Instance.new("TextLabel", SettingsOverlay)
SettingsTitle.Size = UDim2.new(1, 0, 0, 50)
SettingsTitle.Position = UDim2.new(0, 0, 0, 15)
SettingsTitle.BackgroundTransparency = 1
SettingsTitle.Text = "⚙️ SYSTEM SETTINGS"
SettingsTitle.TextColor3 = Color3.fromRGB(255, 255, 255)
SettingsTitle.Font = Enum.Font.FredokaOne
SettingsTitle.TextSize = 24
SettingsTitle.ZIndex = 302

local SettingsContainer = Instance.new("Frame", SettingsOverlay)
SettingsContainer.Size = UDim2.new(0, 320, 0, 240)
SettingsContainer.Position = UDim2.new(0.5, -160, 0.45, -100)
SettingsContainer.BackgroundTransparency = 1
SettingsContainer.ZIndex = 302

local SettingsList = Instance.new("UIListLayout", SettingsContainer)
SettingsList.Padding = UDim.new(0, 6)
SettingsList.HorizontalAlignment = Enum.HorizontalAlignment.Center

---------------------------------------------------------
-- MAIN PANEL UI FRAME
---------------------------------------------------------
local MainFrame = Instance.new("Frame", ScreenGui)
MainFrame.Size = UDim2.new(0, 340, 0, 260)
MainFrame.Position = UDim2.new(0.5, -170, 0.4, -130)
MainFrame.BackgroundColor3 = Color3.fromRGB(15, 65, 95)
MainFrame.BackgroundTransparency = 0.25
MainFrame.Active = true
MainFrame.Draggable = true
MainFrame.ClipsDescendants = true

local MainGradient = Instance.new("UIGradient", MainFrame)
MainGradient.Color = ColorSequence.new({
	ColorSequenceKeypoint.new(0, Color3.fromRGB(80, 200, 240)),
	ColorSequenceKeypoint.new(1, Color3.fromRGB(5, 30, 55))
})
MainGradient.Rotation = 90

Instance.new("UICorner", MainFrame).CornerRadius = UDim.new(0, 18)

local Title = Instance.new("TextLabel", MainFrame)
Title.Size = UDim2.new(1, -20, 0, 30)
Title.Position = UDim2.new(0, 14, 0, 5)
Title.BackgroundTransparency = 1
Title.Text = "🌐 Pyro Panel | Bulletproof Stack Edition"
Title.TextColor3 = Color3.fromRGB(255, 255, 255)
Title.Font = Enum.Font.FredokaOne
Title.TextSize = 13
Title.TextXAlignment = Enum.TextXAlignment.Left

local ToggleOrb = Instance.new("TextButton", ScreenGui)
ToggleOrb.Size = UDim2.new(0, 48, 0, 48)
ToggleOrb.Position = UDim2.new(0.05, 0, 0.25, 0)
ToggleOrb.BackgroundColor3 = Color3.fromRGB(0, 180, 220)
ToggleOrb.Text = "🔥"
ToggleOrb.TextSize = 22
ToggleOrb.Active = true
ToggleOrb.Draggable = true
Instance.new("UICorner", ToggleOrb).CornerRadius = UDim.new(1, 0)

local createdButtons = {}
local function CreateButton(text, parentFrame, layoutOrder)
	local Btn = Instance.new("TextButton", parentFrame)
	Btn.Size = UDim2.new(1, 0, 0, 30)
	Btn.BackgroundColor3 = Color3.fromRGB(0, 160, 220)
	Btn.BackgroundTransparency = 0.2
	Btn.Text = text
	Btn.TextColor3 = Color3.fromRGB(255, 255, 255)
	Btn.Font = Enum.Font.SourceSansBold
	Btn.TextSize = 11
	Btn.LayoutOrder = layoutOrder or 1
	Btn.ZIndex = 303
	
	local BtnGradient = Instance.new("UIGradient", Btn)
	BtnGradient.Color = ColorSequence.new({
		ColorSequenceKeypoint.new(0, Color3.fromRGB(120, 230, 255)),
		ColorSequenceKeypoint.new(1, Color3.fromRGB(0, 90, 160))
	})
	BtnGradient.Rotation = 90
	
	Instance.new("UICorner", Btn).CornerRadius = UDim.new(0, 10)
	Btn.MouseButton1Click:Connect(function() ClickSFX:Play() end)
	table.insert(createdButtons, Btn)
	return Btn
end

---------------------------------------------------------
-- PAGES
---------------------------------------------------------
local MainMenuFrame = Instance.new("Frame", MainFrame)
MainMenuFrame.Size = UDim2.new(1, -24, 1, -45)
MainMenuFrame.Position = UDim2.new(0, 12, 0, 38)
MainMenuFrame.BackgroundTransparency = 1

local MainList = Instance.new("UIListLayout", MainMenuFrame)
MainList.Padding = UDim.new(0, 6)

local BtnAutoGrind = CreateButton("🌾 Open Auto-Grind Engine", MainMenuFrame, 1)
local BtnSystemSettings = CreateButton("⚙️ System Settings (Full Screen)", MainMenuFrame, 2)
local BtnSpeed = CreateButton("⚡ Movement Speed Boost [OFF]", MainMenuFrame, 3)

local GrindMenuFrame = Instance.new("Frame", MainFrame)
GrindMenuFrame.Size = UDim2.new(1, -24, 1, -45)
GrindMenuFrame.Position = UDim2.new(0, 12, 0, 38)
GrindMenuFrame.BackgroundTransparency = 1
GrindMenuFrame.Visible = false

local GrindList = Instance.new("UIListLayout", GrindMenuFrame)
GrindList.Padding = UDim.new(0, 5)

local BtnStartGrind = CreateButton("🚀 Start AFK Buy, Stack & Ignite Loop", GrindMenuFrame, 1)
local BtnIgnite = CreateButton("💥 Master Ignite All Fuses", GrindMenuFrame, 2)
local BtnBackGrind = CreateButton("⬅ Back to Main Menu", GrindMenuFrame, 3)

-- System Settings Controls
local BtnToggleGrindSystem = CreateButton("🔄 Auto-Grind Engine: [ ENABLED ]", SettingsContainer, 1)
local BtnThemeFrutiger = CreateButton("🌐 Theme: Frutiger Aero (Cyan)", SettingsContainer, 2)
local BtnThemeClassic = CreateButton("💎 Theme: Classic Aqua Glass", SettingsContainer, 3)
local BtnThemeLight = CreateButton("☀️ Theme: Light Mode", SettingsContainer, 4)
local BtnThemeDark = CreateButton("🌙 Theme: Dark Mode", SettingsContainer, 5)
local BtnExitSettings = CreateButton("🚪 Save & Exit System Settings", SettingsContainer, 6)

---------------------------------------------------------
-- THEME ENGINE
---------------------------------------------------------
local function ApplyTheme(theme)
	if theme == "Frutiger" then
		MainFrame.BackgroundColor3 = Color3.fromRGB(15, 65, 95)
		MainFrame.BackgroundTransparency = 0.25
		MainGradient.Enabled = true
		Title.TextColor3 = Color3.fromRGB(255, 255, 255)
		for _, btn in ipairs(createdButtons) do
			btn.BackgroundColor3 = Color3.fromRGB(0, 160, 220)
			btn.TextColor3 = Color3.fromRGB(255, 255, 255)
			if btn:FindFirstChild("UIGradient") then btn.UIGradient.Enabled = true end
		end
	elseif theme == "Classic" then
		MainFrame.BackgroundColor3 = Color3.fromRGB(5, 30, 45)
		MainFrame.BackgroundTransparency = 0.15
		MainGradient.Enabled = true
		Title.TextColor3 = Color3.fromRGB(0, 255, 200)
		for _, btn in ipairs(createdButtons) do
			btn.BackgroundColor3 = Color3.fromRGB(10, 50, 75)
			btn.TextColor3 = Color3.fromRGB(0, 255, 200)
			if btn:FindFirstChild("UIGradient") then btn.UIGradient.Enabled = false end
		end
	elseif theme == "Light" then
		MainFrame.BackgroundColor3 = Color3.fromRGB(240, 245, 250)
		MainFrame.BackgroundTransparency = 0.05
		MainGradient.Enabled = false
		Title.TextColor3 = Color3.fromRGB(20, 20, 30)
		for _, btn in ipairs(createdButtons) do
			btn.BackgroundColor3 = Color3.fromRGB(220, 225, 235)
			btn.TextColor3 = Color3.fromRGB(30, 30, 40)
			if btn:FindFirstChild("UIGradient") then btn.UIGradient.Enabled = false end
		end
	elseif theme == "Dark" then
		MainFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 22)
		MainFrame.BackgroundTransparency = 0.05
		MainGradient.Enabled = false
		Title.TextColor3 = Color3.fromRGB(240, 240, 245)
		for _, btn in ipairs(createdButtons) do
			btn.BackgroundColor3 = Color3.fromRGB(32, 32, 40)
			btn.TextColor3 = Color3.fromRGB(240, 240, 245)
			if btn:FindFirstChild("UIGradient") then btn.UIGradient.Enabled = false end
		end
	end
end

BtnThemeFrutiger.MouseButton1Click:Connect(function() ApplyTheme("Frutiger") end)
BtnThemeClassic.MouseButton1Click:Connect(function() ApplyTheme("Classic") end)
BtnThemeLight.MouseButton1Click:Connect(function() ApplyTheme("Light") end)
BtnThemeDark.MouseButton1Click:Connect(function() ApplyTheme("Dark") end)

---------------------------------------------------------
-- LOGIC & ENGINES
---------------------------------------------------------
local systemGrindEnabled = true
local autoGrindRunning = false
local returnSpot = nil

BtnSystemSettings.MouseButton1Click:Connect(function()
	MainFrame.Visible = false
	SettingsOverlay.Visible = true
	SettingsBGM:Play()
end)

BtnToggleGrindSystem.MouseButton1Click:Connect(function()
	systemGrindEnabled = not systemGrindEnabled
	BtnToggleGrindSystem.Text = systemGrindEnabled and "🔄 Auto-Grind Engine: [ ENABLED ]" or "🔄 Auto-Grind Engine: [ DISABLED ]"
	BtnStartGrind.Text = systemGrindEnabled and "🚀 Start AFK Auto-Buy & Place Loop" or "🚫 Grind Disabled in Settings"
end)

BtnExitSettings.MouseButton1Click:Connect(function() 
	SettingsOverlay.Visible = false
	SettingsBGM:Stop()
	MainFrame.Visible = true
end)

---------------------------------------------------------
-- STRICT UI SCANNER (THE VIP FIX)
---------------------------------------------------------
local function AutoPurchaseMarketItems()
	for _, gui in ipairs(PlayerGui:GetChildren()) do
		if gui:IsA("ScreenGui") and gui.Enabled and gui.Name ~= "PyroLiteGui" then
			for _, desc in ipairs(gui:GetDescendants()) do
				if desc:IsA("TextButton") and desc.Visible then
					if string.upper(desc.Text or "") == "BUY" then
						
						-- Ensure button is actually green (more G than R and B)
						local bg = desc.BackgroundColor3
						local isGreen = (bg.G > bg.R + 0.1) and (bg.G > bg.B + 0.1)
						
						-- CRITICAL FIX: The button MUST be inside a ScrollingFrame.
						-- The normal market uses a scrolling list. VIP pop-ups do not.
						local isInsideScrollingFrame = false
						local parentCheck = desc.Parent
						while parentCheck and parentCheck ~= gui do
							if parentCheck:IsA("ScrollingFrame") then
								isInsideScrollingFrame = true
								break
							end
							parentCheck = parentCheck.Parent
						end
						
						if isGreen and isInsideScrollingFrame then
							pcall(function()
								firesignal(desc.MouseButton1Click)
								firesignal(desc.Activated)
							end)
							task.wait(0.05)
						end
						
					end
				end
			end
			
			-- Look for and close any prompt that says "VIP" or "Robux"
			for _, desc in ipairs(gui:GetDescendants()) do
				if desc:IsA("TextLabel") and (string.find(string.lower(desc.Text), "vip") or string.find(string.lower(desc.Text), "robux")) then
					for _, closeBtn in ipairs(gui:GetDescendants()) do
						if closeBtn:IsA("TextButton") and (closeBtn.Text == "X" or string.find(string.lower(closeBtn.Text), "close")) then
							pcall(function() firesignal(closeBtn.MouseButton1Click) end)
						end
					end
				end
			end
		end
	end
end

BtnIgnite.MouseButton1Click:Connect(function()
	for _, prompt in ipairs(Workspace:GetDescendants()) do
		if prompt:IsA("ProximityPrompt") then fireproximityprompt(prompt) end
	end
end)

---------------------------------------------------------
-- ANTI-CRASH AUTO-GRIND LOOP
---------------------------------------------------------
local function RunAutoGrindLoop()
	while autoGrindRunning and systemGrindEnabled do
		-- Safety PCall prevents the loop from silently breaking
		local success, err = pcall(function()
			local char = LocalPlayer.Character
			if not char then return end
			local hum = char:FindFirstChild("Humanoid")
			local hrp = char:FindFirstChild("HumanoidRootPart")
			local backpack = LocalPlayer:FindFirstChild("Backpack")
			
			-- Wait for player to be alive and loaded
			if not hrp or not backpack or not hum or hum.Health <= 0 then return end
			
			if not returnSpot then returnSpot = hrp.CFrame end
			
			-- 1. TELEPORT TO SHOP
			local foundShop = false
			for _, prompt in ipairs(Workspace:GetDescendants()) do
				if prompt:IsA("ProximityPrompt") then
					local txt = string.lower((prompt.ObjectText or "") .. " " .. (prompt.ActionText or ""))
					if string.find(txt, "shop") or string.find(txt, "market") then
						hrp.CFrame = prompt.Parent:IsA("BasePart") and prompt.Parent.CFrame or hrp.CFrame
						task.wait(0.4)
						fireproximityprompt(prompt)
						foundShop = true
						break
					end
				end
			end
			
			if foundShop then
				task.wait(0.8)
				AutoPurchaseMarketItems()
				task.wait(0.4)
			end
			
			-- 2. RETURN TO STACK SPOT
			hrp.CFrame = returnSpot
			task.wait(0.4)
			
			-- 3. DROP STACK
			local toolsPlaced = 0
			for _, item in ipairs(backpack:GetChildren()) do
				if not autoGrindRunning or not systemGrindEnabled then break end
				if item:IsA("Tool") and not string.find(string.lower(item.Name), "lighter") then
					hrp.CFrame = returnSpot
					task.wait(0.1)
					
					item.Parent = char
					task.wait(0.1)
					item:Activate()
					task.wait(0.15)
					toolsPlaced = toolsPlaced + 1
				end
			end
			
			-- 4. SPAM IGNITE
			if toolsPlaced > 0 then
				task.wait(0.3)
				for i = 1, 3 do 
					for _, prompt in ipairs(Workspace:GetDescendants()) do
						if prompt:IsA("ProximityPrompt") then
							local txt = string.lower(prompt.ActionText or "")
							if string.find(txt, "fuse") or string.find(txt, "light") or string.find(txt, "interact") then
								if prompt.Parent and prompt.Parent:IsA("BasePart") then
									if (prompt.Parent.Position - hrp.Position).Magnitude <= 20 then
										fireproximityprompt(prompt)
									end
								end
							end
						end
					end
					task.wait(0.15)
				end
			end
		end)
		
		-- If an unexpected game glitch happens, wait and try again instead of breaking
		if not success then task.wait(2) end
		
		task.wait(1.5)
	end
end

BtnStartGrind.MouseButton1Click:Connect(function()
	if not systemGrindEnabled then return end
	autoGrindRunning = not autoGrindRunning
	if autoGrindRunning then
		returnSpot = nil
		BtnStartGrind.Text = "🛑 Stop AFK Buy & Ignite Loop"
		task.spawn(RunAutoGrindLoop)
	else
		BtnStartGrind.Text = "🚀 Start AFK Buy, Stack & Ignite Loop"
	end
end)

local speedActive = false
BtnSpeed.MouseButton1Click:Connect(function()
	speedActive = not speedActive
	local hum = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildWhichIsA("Humanoid")
	if hum then hum.WalkSpeed = speedActive and 35 or 16 end
	BtnSpeed.Text = speedActive and "⚡ Speed Boost [ON]" or "⚡ Movement Speed Boost [OFF]"
end)

BtnAutoGrind.MouseButton1Click:Connect(function()
	MainMenuFrame.Visible = false
	GrindMenuFrame.Visible = true
end)

BtnBackGrind.MouseButton1Click:Connect(function()
	GrindMenuFrame.Visible = false
	MainMenuFrame.Visible = true
end)

local isOpen = true
local lastPos = MainFrame.Position
local fullSize = UDim2.new(0, 340, 0, 260)
local tweenInfo = TweenInfo.new(0.5, Enum.EasingStyle.Quart, Enum.EasingDirection.Out)

ToggleOrb.MouseButton1Click:Connect(function()
	if isOpen then
		lastPos = MainFrame.Position
		local orbCenterPos = UDim2.new(
			ToggleOrb.Position.X.Scale, ToggleOrb.Position.X.Offset + 5,
			ToggleOrb.Position.Y.Scale, ToggleOrb.Position.Y.Offset + 5
		)
		
		local shrinkTween = TweenService:Create(MainFrame, tweenInfo, {
			Size = UDim2.new(0, 20, 0, 20),
			Position = orbCenterPos, BackgroundTransparency = 1
		})
		shrinkTween:Play()
		shrinkTween.Completed:Connect(function() if not isOpen then MainFrame.Visible = false end end)
		isOpen = false
	else
		MainFrame.Visible = true
		local expandTween = TweenService:Create(MainFrame, tweenInfo, {
			Size = fullSize, Position = lastPos, BackgroundTransparency = 0.25
		})
		expandTween:Play()
		isOpen = true
	end
end)

Features & Information

Check out the YouTube video for the features: https://youtu.be/spVekAcki2Q?si=qDQ4AxwCVHSypebs

Community Comments (0)

No comments yet for this script.

More Scripts for Pyro Playground 💥 [UPDATE]