Content Creator Script
Key Required

Content Creator Script

[UP] Just a baseplate.FluxDevFluxDev 1.2K views 8.9K executesUpdated Aug 22, 2026
Unrated
00
Lua Script•2843 lines (39581 chars)
--========================================================--
--       VERIFIED CREATOR PANEL V4
--       LOCAL CREATOR TOOLS
--
--       FREECAM CORREGIDA
--       RIGHT CLICK + MOUSE
--       W A S D
--       SPACE / CTRL
--       SPECTATE
--       FLY
--       NOCLIP
--       FOV
--       DAY / NIGHT
--
--       LocalScript
--       StarterPlayer > StarterPlayerScripts
--========================================================--

--========================================================--
-- SERVICES
--========================================================--

local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Lighting = game:GetService("Lighting")
local TweenService = game:GetService("TweenService")
local StarterGui = game:GetService("StarterGui")

local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
local Camera = workspace.CurrentCamera

--========================================================--
-- CONFIG
--========================================================--

local CONFIG = {

	PanelWidth = 650,
	PanelHeight = 430,

	CameraSpeed = 1.5,

	MinCameraSpeed = 0.1,
	MaxCameraSpeed = 5,

	DefaultFOV = 70,

	MinFOV = 30,
	MaxFOV = 120,

	WalkSpeed = 16,
	JumpPower = 50,

	FlySpeed = 60,

	ToggleKey = Enum.KeyCode.RightShift,

	FreecamKey = Enum.KeyCode.C,
}

--========================================================--
-- STATE
--========================================================--

local State = {

	GUIVisible = true,

	Freecam = false,

	Flying = false,

	Noclip = false,

	Spectating = false,

	SpectatePlayer = nil,

	-- Freecam movement

	MoveForward = false,

	MoveBackward = false,

	MoveLeft = false,

	MoveRight = false,

	MoveUp = false,

	MoveDown = false,

	-- Mouse

	RightMouseHeld = false,

	-- Camera

	CameraPosition = nil,

	CameraRotation = Vector2.new(0, 0),

	-- Saved camera

	OldCameraType = nil,

	OldCameraSubject = nil,

	-- Saved character

	OldWalkSpeed = nil,

	OldJumpPower = nil,

	OldAutoRotate = nil,

	FreecamCharacterCFrame = nil,

	-- Lighting

	OriginalClockTime = Lighting.ClockTime,
}

--========================================================--
-- CHARACTER
--========================================================--

local function getCharacter()

	return LocalPlayer.Character
		or LocalPlayer.CharacterAdded:Wait()

end

local function getHumanoid()

	local character = getCharacter()

	if not character then
		return nil
	end

	return character:FindFirstChildOfClass("Humanoid")

end

local function getRoot()

	local character = getCharacter()

	if not character then
		return nil
	end

	return character:FindFirstChild("HumanoidRootPart")

end

--========================================================--
-- TWEEN
--========================================================--

local function tween(object, properties, duration)

	local info = TweenInfo.new(

		duration or 0.2,

		Enum.EasingStyle.Quad,

		Enum.EasingDirection.Out

	)

	TweenService:Create(

		object,

		info,

		properties

	):Play()

end

--========================================================--
-- SCREEN GUI
--========================================================--

local ScreenGui = Instance.new("ScreenGui")

ScreenGui.Name = "VerifiedCreatorPanel"

ScreenGui.ResetOnSpawn = false

ScreenGui.IgnoreGuiInset = true

ScreenGui.ZIndexBehavior =
	Enum.ZIndexBehavior.Sibling

ScreenGui.Parent = PlayerGui

--========================================================--
-- OPEN BUTTON
--========================================================--

local OpenButton = Instance.new("TextButton")

OpenButton.Name = "OpenButton"

OpenButton.Size =
	UDim2.new(0, 48, 0, 48)

OpenButton.Position =
	UDim2.new(0, 18, 0.5, -24)

OpenButton.BackgroundColor3 =
	Color3.fromRGB(12, 12, 16)

OpenButton.Text = "C"

OpenButton.TextColor3 =
	Color3.fromRGB(255, 255, 255)

OpenButton.TextSize = 22

OpenButton.Font =
	Enum.Font.GothamBold

OpenButton.AutoButtonColor = false

OpenButton.Visible = false

OpenButton.Parent = ScreenGui

local OpenCorner = Instance.new("UICorner")

OpenCorner.CornerRadius =
	UDim.new(1, 0)

OpenCorner.Parent = OpenButton

local OpenStroke = Instance.new("UIStroke")

OpenStroke.Color =
	Color3.fromRGB(255, 45, 65)

OpenStroke.Thickness = 2

OpenStroke.Parent = OpenButton

--========================================================--
-- MAIN
--========================================================--

local Main = Instance.new("Frame")

Main.Name = "MainPanel"

Main.Size =
	UDim2.new(
		0,
		CONFIG.PanelWidth,
		0,
		CONFIG.PanelHeight
	)

Main.Position =
	UDim2.new(
		0.5,
		-CONFIG.PanelWidth / 2,
		0.5,
		-CONFIG.PanelHeight / 2
	)

Main.BackgroundColor3 =
	Color3.fromRGB(10, 10, 14)

Main.BorderSizePixel = 0

Main.Parent = ScreenGui

local MainCorner = Instance.new("UICorner")

MainCorner.CornerRadius =
	UDim.new(0, 12)

MainCorner.Parent = Main

local MainStroke = Instance.new("UIStroke")

MainStroke.Color =
	Color3.fromRGB(255, 40, 60)

MainStroke.Thickness = 2

MainStroke.Parent = Main

--========================================================--
-- HEADER
--========================================================--

local Header = Instance.new("Frame")

Header.Name = "Header"

Header.Size =
	UDim2.new(1, 0, 0, 65)

Header.BackgroundColor3 =
	Color3.fromRGB(16, 16, 21)

Header.BorderSizePixel = 0

Header.Parent = Main

local HeaderCorner = Instance.new("UICorner")

HeaderCorner.CornerRadius =
	UDim.new(0, 12)

HeaderCorner.Parent = Header

local Title = Instance.new("TextLabel")

Title.BackgroundTransparency = 1

Title.Position =
	UDim2.new(0, 18, 0, 7)

Title.Size =
	UDim2.new(1, -100, 0, 28)

Title.Text = "VERIFIED CREATOR"

Title.TextColor3 =
	Color3.fromRGB(255, 255, 255)

Title.TextSize = 20

Title.Font =
	Enum.Font.GothamBold

Title.TextXAlignment =
	Enum.TextXAlignment.Left

Title.Parent = Header

local Subtitle = Instance.new("TextLabel")

Subtitle.BackgroundTransparency = 1

Subtitle.Position =
	UDim2.new(0, 19, 0, 34)

Subtitle.Size =
	UDim2.new(1, -100, 0, 20)

Subtitle.Text =
	"CONTENT CREATOR TOOLS"

Subtitle.TextColor3 =
	Color3.fromRGB(255, 70, 85)

Subtitle.TextSize = 11

Subtitle.Font =
	Enum.Font.GothamBold

Subtitle.TextXAlignment =
	Enum.TextXAlignment.Left

Subtitle.Parent = Header

local CloseButton = Instance.new("TextButton")

CloseButton.Name = "Close"

CloseButton.Size =
	UDim2.new(0, 38, 0, 38)

CloseButton.Position =
	UDim2.new(1, -50, 0, 13)

CloseButton.BackgroundColor3 =
	Color3.fromRGB(35, 15, 18)

CloseButton.Text = "×"

CloseButton.TextColor3 =
	Color3.fromRGB(255, 80, 90)

CloseButton.TextSize = 25

CloseButton.Font =
	Enum.Font.GothamBold

CloseButton.AutoButtonColor = false

CloseButton.Parent = Header

local CloseCorner = Instance.new("UICorner")

CloseCorner.CornerRadius =
	UDim.new(0, 8)

CloseCorner.Parent = CloseButton

--========================================================--
-- TABS
--========================================================--

local TabBar = Instance.new("Frame")

TabBar.Size =
	UDim2.new(0, 130, 1, -75)

TabBar.Position =
	UDim2.new(0, 10, 0, 72)

TabBar.BackgroundColor3 =
	Color3.fromRGB(14, 14, 19)

TabBar.BorderSizePixel = 0

TabBar.Parent = Main

local TabCorner = Instance.new("UICorner")

TabCorner.CornerRadius =
	UDim.new(0, 9)

TabCorner.Parent = TabBar

local TabLayout = Instance.new("UIListLayout")

TabLayout.Padding =
	UDim.new(0, 7)

TabLayout.HorizontalAlignment =
	Enum.HorizontalAlignment.Center

TabLayout.SortOrder =
	Enum.SortOrder.LayoutOrder

TabLayout.Parent = TabBar

local TabPadding = Instance.new("UIPadding")

TabPadding.PaddingTop =
	UDim.new(0, 10)

TabPadding.PaddingLeft =
	UDim.new(0, 8)

TabPadding.PaddingRight =
	UDim.new(0, 8)

TabPadding.Parent = TabBar

--========================================================--
-- CONTENT
--========================================================--

local Content = Instance.new("Frame")

Content.Size =
	UDim2.new(1, -155, 1, -75)

Content.Position =
	UDim2.new(0, 145, 0, 72)

Content.BackgroundTransparency = 1

Content.Parent = Main

local Pages = {}

local function createPage(name)

	local page = Instance.new("ScrollingFrame")

	page.Name = name

	page.Size =
		UDim2.new(1, 0, 1, 0)

	page.BackgroundTransparency = 1

	page.BorderSizePixel = 0

	page.ScrollBarThickness = 4

	page.ScrollBarImageColor3 =
		Color3.fromRGB(255, 50, 70)

	page.Visible = false

	page.CanvasSize =
		UDim2.new(0, 0, 0, 0)

	page.AutomaticCanvasSize =
		Enum.AutomaticSize.Y

	page.Parent = Content

	local layout =
		Instance.new("UIListLayout")

	layout.Padding =
		UDim.new(0, 8)

	layout.SortOrder =
		Enum.SortOrder.LayoutOrder

	layout.Parent = page

	local padding =
		Instance.new("UIPadding")

	padding.PaddingTop =
		UDim.new(0, 5)

	padding.PaddingBottom =
		UDim.new(0, 10)

	padding.PaddingRight =
		UDim.new(0, 8)

	padding.Parent = page

	Pages[name] = page

	return page
end

local CameraPage =
	createPage("Camera")

local PlayerPage =
	createPage("Player")

local SpectatePage =
	createPage("Spectate")

local SettingsPage =
	createPage("Settings")

--========================================================--
-- TAB FUNCTION
--========================================================--

local function createTab(text, pageName)

	local button =
		Instance.new("TextButton")

	button.Size =
		UDim2.new(1, 0, 0, 42)

	button.BackgroundColor3 =
		Color3.fromRGB(20, 20, 26)

	button.Text = text

	button.TextColor3 =
		Color3.fromRGB(190, 190, 200)

	button.TextSize = 12

	button.Font =
		Enum.Font.GothamBold

	button.AutoButtonColor = false

	button.Parent = TabBar

	local corner =
		Instance.new("UICorner")

	corner.CornerRadius =
		UDim.new(0, 7)

	corner.Parent = button

	button.MouseButton1Click:Connect(

		function()

			for _, page in pairs(Pages) do

				page.Visible = false

			end

			Pages[pageName].Visible = true

			for _, child in ipairs(
				TabBar:GetChildren()
			) do

				if child:IsA("TextButton") then

					child.BackgroundColor3 =
						Color3.fromRGB(
							20,
							20,
							26
						)

					child.TextColor3 =
						Color3.fromRGB(
							190,
							190,
							200
						)

				end

			end

			button.BackgroundColor3 =
				Color3.fromRGB(
					120,
					20,
					30
				)

			button.TextColor3 =
				Color3.fromRGB(
					255,
					255,
					255
				)

		end
	)

	return button
end

createTab(
	"🎥 CAMERA",
	"Camera"
)

createTab(
	"⚡ PLAYER",
	"Player"
)

createTab(
	"👁 SPECTATE",
	"Spectate"
)

createTab(
	"⚙ SETTINGS",
	"Settings"
)

--========================================================--
-- SECTION
--========================================================--

local function createSection(page, text)

	local label =
		Instance.new("TextLabel")

	label.Size =
		UDim2.new(1, 0, 0, 28)

	label.BackgroundTransparency = 1

	label.Text = text

	label.TextColor3 =
		Color3.fromRGB(
			255,
			65,
			80
		)

	label.TextSize = 13

	label.Font =
		Enum.Font.GothamBold

	label.TextXAlignment =
		Enum.TextXAlignment.Left

	label.Parent = page

	return label
end

--========================================================--
-- BUTTON
--========================================================--

local function createButton(page, text)

	local button =
		Instance.new("TextButton")

	button.Size =
		UDim2.new(1, 0, 0, 40)

	button.BackgroundColor3 =
		Color3.fromRGB(
			22,
			22,
			28
		)

	button.Text = text

	button.TextColor3 =
		Color3.fromRGB(
			235,
			235,
			240
		)

	button.TextSize = 12

	button.Font =
		Enum.Font.GothamBold

	button.AutoButtonColor = false

	button.Parent = page

	local corner =
		Instance.new("UICorner")

	corner.CornerRadius =
		UDim.new(0, 7)

	corner.Parent = button

	local stroke =
		Instance.new("UIStroke")

	stroke.Color =
		Color3.fromRGB(
			45,
			45,
			55
		)

	stroke.Thickness = 1

	stroke.Parent = button

	return button
end

--========================================================--
-- SLIDER
--========================================================--

local function createSlider(
	page,
	title,
	minimum,
	maximum,
	default,
	callback
)

	local holder =
		Instance.new("Frame")

	holder.Size =
		UDim2.new(1, 0, 0, 60)

	holder.BackgroundTransparency = 1

	holder.Parent = page

	local label =
		Instance.new("TextLabel")

	label.Size =
		UDim2.new(0.7, 0, 0, 22)

	label.BackgroundTransparency = 1

	label.Text = title

	label.TextColor3 =
		Color3.fromRGB(
			220,
			220,
			225
		)

	label.TextSize = 12

	label.Font =
		Enum.Font.GothamBold

	label.TextXAlignment =
		Enum.TextXAlignment.Left

	label.Parent = holder

	local valueLabel =
		Instance.new("TextLabel")

	valueLabel.Position =
		UDim2.new(0.7, 0, 0, 0)

	valueLabel.Size =
		UDim2.new(0.3, 0, 0, 22)

	valueLabel.BackgroundTransparency = 1

	valueLabel.Text =
		string.format(
			"%.2f",
			default
		)

	valueLabel.TextColor3 =
		Color3.fromRGB(
			255,
			65,
			80
		)

	valueLabel.TextSize = 12

	valueLabel.Font =
		Enum.Font.GothamBold

	valueLabel.TextXAlignment =
		Enum.TextXAlignment.Right

	valueLabel.Parent = holder

	local bar =
		Instance.new("Frame")

	bar.Position =
		UDim2.new(0, 0, 0, 34)

	bar.Size =
		UDim2.new(1, 0, 0, 7)

	bar.BackgroundColor3 =
		Color3.fromRGB(
			35,
			35,
			42
		)

	bar.BorderSizePixel = 0

	bar.Parent = holder

	local barCorner =
		Instance.new("UICorner")

	barCorner.CornerRadius =
		UDim.new(1, 0)

	barCorner.Parent = bar

	local fill =
		Instance.new("Frame")

	fill.Size =
		UDim2.new(
			math.clamp(
				(default - minimum)
					/
					(maximum - minimum),
				0,
				1
			),
			0,
			1,
			0
		)

	fill.BackgroundColor3 =
		Color3.fromRGB(
			255,
			45,
			65
		)

	fill.BorderSizePixel = 0

	fill.Parent = bar

	local fillCorner =
		Instance.new("UICorner")

	fillCorner.CornerRadius =
		UDim.new(1, 0)

	fillCorner.Parent = fill

	local dragging = false

	local function update(input)

		local relative =
			(
				input.Position.X
				- bar.AbsolutePosition.X
			)
			/
			bar.AbsoluteSize.X

		relative =
			math.clamp(
				relative,
				0,
				1
			)

		local value =
			minimum
			+
			(maximum - minimum)
			*
			relative

		valueLabel.Text =
			string.format(
				"%.2f",
				value
			)

		fill.Size =
			UDim2.new(
				relative,
				0,
				1,
				0
			)

		callback(value)
	end

	bar.InputBegan:Connect(

		function(input)

			if input.UserInputType ==
				Enum.UserInputType.MouseButton1
				or
				input.UserInputType ==
				Enum.UserInputType.Touch then

				dragging = true

				update(input)

			end
		end
	)

	UserInputService.InputChanged:Connect(

		function(input)

			if not dragging then
				return
			end

			if input.UserInputType ==
				Enum.UserInputType.MouseMovement
				or
				input.UserInputType ==
				Enum.UserInputType.Touch then

				update(input)

			end
		end
	)

	UserInputService.InputEnded:Connect(

		function(input)

			if input.UserInputType ==
				Enum.UserInputType.MouseButton1
				or
				input.UserInputType ==
				Enum.UserInputType.Touch then

				dragging = false

			end
		end
	)

	return holder
end

--========================================================--
-- CAMERA PAGE
--========================================================--

createSection(
	CameraPage,
	"CAMERA CONTROLS"
)

local FreecamButton =
	createButton(
		CameraPage,
		"🎥 FREE CAMERA : OFF"
	)

createSlider(
	CameraPage,
	"Camera Speed",
	CONFIG.MinCameraSpeed,
	CONFIG.MaxCameraSpeed,
	CONFIG.CameraSpeed,

	function(value)

		CONFIG.CameraSpeed = value

	end
)

createSlider(
	CameraPage,
	"Field Of View",
	CONFIG.MinFOV,
	CONFIG.MaxFOV,
	CONFIG.DefaultFOV,

	function(value)

		Camera.FieldOfView = value

	end
)

local ResetCameraButton =
	createButton(
		CameraPage,
		"↻ RESET CAMERA"
	)

--========================================================--
-- START FREECAM
--========================================================--

local function startFreecam()

	if State.Freecam then
		return
	end

	local humanoid =
		getHumanoid()

	local root =
		getRoot()

	if not humanoid or not root then
		return
	end

	-- Activar
	State.Freecam = true

	-- Guardar cámara
	State.OldCameraType =
		Camera.CameraType

	State.OldCameraSubject =
		Camera.CameraSubject

	-- Guardar personaje
	State.OldWalkSpeed =
		humanoid.WalkSpeed

	State.OldJumpPower =
		humanoid.JumpPower

	State.OldAutoRotate =
		humanoid.AutoRotate

	State.FreecamCharacterCFrame =
		root.CFrame

	--====================================================--
	-- GUARDAR LA CÁMARA CORRECTAMENTE
	--====================================================--

	local currentCFrame =
		Camera.CFrame

	local look =
		currentCFrame.LookVector

	-- Pitch = arriba / abajo
	local pitch =
		math.asin(
			math.clamp(
				look.Y,
				-1,
				1
			)
		)

	-- Yaw = izquierda / derecha
	local yaw =
		math.atan2(
			-look.X,
			-look.Z
		)

	State.CameraRotation =
		Vector2.new(
			pitch,
			yaw
		)

	State.CameraPosition =
		currentCFrame.Position

	--====================================================--
	-- CONGELAR PERSONAJE
	--====================================================--

	root.Anchored = true

	humanoid.WalkSpeed = 0

	humanoid.JumpPower = 0

	humanoid.AutoRotate = false

	-- IMPORTANTE:
	-- NO usamos PlatformStand.
	-- Esto mantiene al personaje de pie.

	--====================================================--
	-- ACTIVAR CÁMARA SCRIPTABLE
	--====================================================--

	Camera.CameraType =
		Enum.CameraType.Scriptable

	State.RightMouseHeld = false

	UserInputService.MouseBehavior =
		Enum.MouseBehavior.Default

	FreecamButton.Text =
		"🎥 FREE CAMERA : ON"

	FreecamButton:SetAttribute(
		"Active",
		true
	)

	tween(
		FreecamButton,
		{
			BackgroundColor3 =
				Color3.fromRGB(
					110,
					20,
					30
				)
		},
		0.15
	)
end

--========================================================--
-- STOP FREECAM
--========================================================--

local function stopFreecam()

	if not State.Freecam then
		return
	end

	State.Freecam = false

	local humanoid =
		getHumanoid()

	local root =
		getRoot()

	-- Liberar mouse
	State.RightMouseHeld = false

	UserInputService.MouseBehavior =
		Enum.MouseBehavior.Default

	--====================================================--
	-- RESTAURAR PERSONAJE
	--====================================================--

	if root then

		root.Anchored = false

		if State.FreecamCharacterCFrame then

			root.CFrame =
				State.FreecamCharacterCFrame

		end
	end

	if humanoid then

		humanoid.WalkSpeed =
			State.OldWalkSpeed
			or CONFIG.WalkSpeed

		humanoid.JumpPower =
			State.OldJumpPower
			or CONFIG.JumpPower

		if State.OldAutoRotate ~= nil then

			humanoid.AutoRotate =
				State.OldAutoRotate

		else

			humanoid.AutoRotate = true

		end
	end

	--====================================================--
	-- RESTAURAR CÁMARA
	--====================================================--

	Camera.CameraType =
		State.OldCameraType
		or Enum.CameraType.Custom

	Camera.CameraSubject =
		State.OldCameraSubject
		or humanoid

	-- Limpiar movimiento
	State.MoveForward = false
	State.MoveBackward = false
	State.MoveLeft = false
	State.MoveRight = false
	State.MoveUp = false
	State.MoveDown = false

	FreecamButton.Text =
		"🎥 FREE CAMERA : OFF"

	FreecamButton:SetAttribute(
		"Active",
		false
	)

	tween(
		FreecamButton,
		{
			BackgroundColor3 =
				Color3.fromRGB(
					22,
					22,
					28
				)
		},
		0.15
	)
end

FreecamButton.MouseButton1Click:Connect(

	function()

		if State.Freecam then

			stopFreecam()

		else

			startFreecam()

		end

	end
)

ResetCameraButton.MouseButton1Click:Connect(

	function()

		stopFreecam()

		Camera.FieldOfView =
			CONFIG.DefaultFOV

		State.CameraRotation =
			Vector2.new(0, 0)

		State.CameraPosition = nil

	end
)

--========================================================--
-- PLAYER PAGE
--========================================================--

createSection(
	PlayerPage,
	"PLAYER TOOLS"
)

local FlyButton =
	createButton(
		PlayerPage,
		"✈ FLY : OFF"
	)

local NoclipButton =
	createButton(
		PlayerPage,
		"👻 NOCLIP : OFF"
	)

createSlider(
	PlayerPage,
	"Walk Speed",
	8,
	100,
	CONFIG.WalkSpeed,

	function(value)

		CONFIG.WalkSpeed = value

		if not State.Freecam then

			local humanoid =
				getHumanoid()

			if humanoid then

				humanoid.WalkSpeed =
					value

			end
		end
	end
)

createSlider(
	PlayerPage,
	"Jump Power",
	20,
	150,
	CONFIG.JumpPower,

	function(value)

		CONFIG.JumpPower = value

		if not State.Freecam then

			local humanoid =
				getHumanoid()

			if humanoid then

				humanoid.JumpPower =
					value

			end
		end
	end
)

local ResetMovementButton =
	createButton(
		PlayerPage,
		"↻ RESET MOVEMENT"
	)

--========================================================--
-- FLY
--========================================================--

local function startFly()

	if State.Flying then
		return
	end

	if State.Freecam then
		stopFreecam()
	end

	local humanoid =
		getHumanoid()

	local root =
		getRoot()

	if not humanoid or not root then
		return
	end

	State.Flying = true

	humanoid.PlatformStand = true

	FlyButton.Text =
		"✈ FLY : ON"

	FlyButton:SetAttribute(
		"Active",
		true
	)

	tween(
		FlyButton,
		{
			BackgroundColor3 =
				Color3.fromRGB(
					110,
					20,
					30
				)
		},
		0.15
	)
end

local function stopFly()

	if not State.Flying then
		return
	end

	State.Flying = false

	local humanoid =
		getHumanoid()

	local root =
		getRoot()

	if root then

		root.AssemblyLinearVelocity =
			Vector3.zero

	end

	if humanoid then

		humanoid.PlatformStand =
			false

		humanoid.WalkSpeed =
			CONFIG.WalkSpeed

		humanoid.JumpPower =
			CONFIG.JumpPower

	end

	FlyButton.Text =
		"✈ FLY : OFF"

	FlyButton:SetAttribute(
		"Active",
		false
	)

	tween(
		FlyButton,
		{
			BackgroundColor3 =
				Color3.fromRGB(
					22,
					22,
					28
				)
		},
		0.15
	)
end

FlyButton.MouseButton1Click:Connect(

	function()

		if State.Flying then

			stopFly()

		else

			startFly()

		end

	end
)

--========================================================--
-- NOCLIP
--========================================================--

NoclipButton.MouseButton1Click:Connect(

	function()

		State.Noclip =
			not State.Noclip

		if State.Noclip then

			NoclipButton.Text =
				"👻 NOCLIP : ON"

			NoclipButton:SetAttribute(
				"Active",
				true
			)

			tween(
				NoclipButton,
				{
					BackgroundColor3 =
						Color3.fromRGB(
							110,
							20,
							30
						)
				},
				0.15
			)

		else

			NoclipButton.Text =
				"👻 NOCLIP : OFF"

			NoclipButton:SetAttribute(
				"Active",
				false
			)

			tween(
				NoclipButton,
				{
					BackgroundColor3 =
						Color3.fromRGB(
							22,
							22,
							28
						)
				},
				0.15
			)

		end

	end
)

--========================================================--
-- RESET MOVEMENT
--========================================================--

ResetMovementButton.MouseButton1Click:Connect(

	function()

		stopFly()

		local humanoid =
			getHumanoid()

		if humanoid then

			humanoid.PlatformStand =
				false

			humanoid.AutoRotate =
				true

			humanoid.WalkSpeed = 16

			humanoid.JumpPower = 50

		end

		State.Noclip = false

		NoclipButton.Text =
			"👻 NOCLIP : OFF"

		NoclipButton:SetAttribute(
			"Active",
			false
		)

		tween(
			NoclipButton,
			{
				BackgroundColor3 =
					Color3.fromRGB(
						22,
						22,
						28
					)
			},
			0.15
		)

	end
)

--========================================================--
-- SPECTATE PAGE
--========================================================--

createSection(
	SpectatePage,
	"PLAYERS"
)

local SpectateStatus =
	Instance.new("TextLabel")

SpectateStatus.Size =
	UDim2.new(1, 0, 0, 35)

SpectateStatus.BackgroundColor3 =
	Color3.fromRGB(
		20,
		20,
		26
	)

SpectateStatus.Text =
	"No player selected"

SpectateStatus.TextColor3 =
	Color3.fromRGB(
		180,
		180,
		190
	)

SpectateStatus.TextSize = 12

SpectateStatus.Font =
	Enum.Font.GothamBold

SpectateStatus.Parent =
	SpectatePage

local SpectateCorner =
	Instance.new("UICorner")

SpectateCorner.CornerRadius =
	UDim.new(0, 7)

SpectateCorner.Parent =
	SpectateStatus

local StopSpectateButton =
	createButton(
		SpectatePage,
		"⏹ STOP SPECTATE"
	)

local PlayerListFrame =
	Instance.new("Frame")

PlayerListFrame.Size =
	UDim2.new(1, 0, 0, 0)

PlayerListFrame.AutomaticSize =
	Enum.AutomaticSize.Y

PlayerListFrame.BackgroundTransparency = 1

PlayerListFrame.Parent =
	SpectatePage

local PlayerListLayout =
	Instance.new("UIListLayout")

PlayerListLayout.Padding =
	UDim.new(0, 6)

PlayerListLayout.Parent =
	PlayerListFrame

--========================================================--
-- STOP SPECTATE
--========================================================--

local function stopSpectate()

	State.Spectating = false

	State.SpectatePlayer = nil

	Camera.CameraType =
		Enum.CameraType.Custom

	local humanoid =
		getHumanoid()

	if humanoid then

		Camera.CameraSubject =
			humanoid

	end

	SpectateStatus.Text =
		"No player selected"
end

StopSpectateButton.MouseButton1Click:Connect(
	stopSpectate
)

--========================================================--
-- SPECTATE PLAYER
--========================================================--

local function spectatePlayer(player)

	if not player then
		return
	end

	if player == LocalPlayer then
		return
	end

	local character =
		player.Character

	if not character then
		return
	end

	local humanoid =
		character:FindFirstChildOfClass(
			"Humanoid"
		)

	if not humanoid then
		return
	end

	if State.Freecam then
		stopFreecam()
	end

	State.Spectating = true

	State.SpectatePlayer = player

	Camera.CameraType =
		Enum.CameraType.Custom

	Camera.CameraSubject =
		humanoid

	SpectateStatus.Text =
		"Spectating: "
		.. player.DisplayName
end

--========================================================--
-- PLAYER LIST
--========================================================--

local function refreshPlayerList()

	for _, child in ipairs(
		PlayerListFrame:GetChildren()
	) do

		if child:IsA("TextButton") then

			child:Destroy()

		end
	end

	for _, player in ipairs(
		Players:GetPlayers()
	) do

		if player ~= LocalPlayer then

			local button =
				Instance.new("TextButton")

			button.Size =
				UDim2.new(
					1,
					0,
					0,
					40
				)

			button.BackgroundColor3 =
				Color3.fromRGB(
					22,
					22,
					28
				)

			button.Text =
				"👤  "
				.. player.DisplayName
				.. "  @"
				.. player.Name

			button.TextColor3 =
				Color3.fromRGB(
					230,
					230,
					235
				)

			button.TextSize = 11

			button.Font =
				Enum.Font.GothamBold

			button.AutoButtonColor =
				false

			button.Parent =
				PlayerListFrame

			local corner =
				Instance.new("UICorner")

			corner.CornerRadius =
				UDim.new(0, 7)

			corner.Parent =
				button

			button.MouseButton1Click:Connect(

				function()

					spectatePlayer(
						player
					)

				end
			)
		end
	end
end

Players.PlayerAdded:Connect(
	refreshPlayerList
)

Players.PlayerRemoving:Connect(

	function(player)

		if State.SpectatePlayer ==
			player then

			stopSpectate()

		end

		task.wait(0.1)

		refreshPlayerList()

	end
)

refreshPlayerList()

--========================================================--
-- SETTINGS PAGE
--========================================================--

createSection(
	SettingsPage,
	"CREATOR SETTINGS"
)

local DayButton =
	createButton(
		SettingsPage,
		"☀ SET DAY"
	)

local NightButton =
	createButton(
		SettingsPage,
		"🌙 SET NIGHT"
	)

local ResetLightingButton =
	createButton(
		SettingsPage,
		"↻ RESET LIGHTING"
	)

local HideButton =
	createButton(
		SettingsPage,
		"👁 HIDE CREATOR GUI"
	)

local CreatorInfo =
	Instance.new("TextLabel")

CreatorInfo.Size =
	UDim2.new(1, 0, 0, 70)

CreatorInfo.BackgroundColor3 =
	Color3.fromRGB(
		16,
		16,
		21
	)

CreatorInfo.Text =
	"VERIFIED CREATOR PANEL\n"
	..
	"Camera • Spectate • Recording • Creator Tools"

CreatorInfo.TextColor3 =
	Color3.fromRGB(
		170,
		170,
		180
	)

CreatorInfo.TextSize = 11

CreatorInfo.Font =
	Enum.Font.GothamBold

CreatorInfo.TextWrapped = true

CreatorInfo.Parent =
	SettingsPage

local InfoCorner =
	Instance.new("UICorner")

InfoCorner.CornerRadius =
	UDim.new(0, 8)

InfoCorner.Parent =
	CreatorInfo

DayButton.MouseButton1Click:Connect(

	function()

		Lighting.ClockTime = 14

	end
)

NightButton.MouseButton1Click:Connect(

	function()

		Lighting.ClockTime = 0

	end
)

ResetLightingButton.MouseButton1Click:Connect(

	function()

		Lighting.ClockTime =
			State.OriginalClockTime

	end
)

--========================================================--
-- GUI VISIBILITY
--========================================================--

local function setGUIVisible(visible)

	State.GUIVisible = visible

	Main.Visible = visible

	OpenButton.Visible =
		not visible

end

CloseButton.MouseButton1Click:Connect(

	function()

		setGUIVisible(false)

	end
)

OpenButton.MouseButton1Click:Connect(

	function()

		setGUIVisible(true)

	end
)

HideButton.MouseButton1Click:Connect(

	function()

		setGUIVisible(false)

	end
)

--========================================================--
-- DRAG GUI
--========================================================--

local dragging = false

local dragStart

local startPosition

Header.InputBegan:Connect(

	function(input)

		if input.UserInputType ==
			Enum.UserInputType.MouseButton1
			or
			input.UserInputType ==
			Enum.UserInputType.Touch then

			dragging = true

			dragStart =
				input.Position

			startPosition =
				Main.Position

		end
	end
)

UserInputService.InputChanged:Connect(

	function(input)

		if not dragging then
			return
		end

		if input.UserInputType ==
			Enum.UserInputType.MouseMovement
			or
			input.UserInputType ==
			Enum.UserInputType.Touch then

			local delta =
				input.Position
				- dragStart

			Main.Position =
				UDim2.new(

					startPosition.X.Scale,

					startPosition.X.Offset
						+ delta.X,

					startPosition.Y.Scale,

					startPosition.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
)

--========================================================--
-- KEYBOARD
--========================================================--

UserInputService.InputBegan:Connect(

	function(input, processed)

		if processed then
			return
		end

		local key =
			input.KeyCode

		-- GUI
		if key == CONFIG.ToggleKey then

			setGUIVisible(
				not State.GUIVisible
			)

			return
		end

		-- FREECAM
		if key == CONFIG.FreecamKey then

			if State.Freecam then

				stopFreecam()

			else

				startFreecam()

			end

			return
		end

		-- MOVIMIENTO
		if State.Freecam then

			if key == Enum.KeyCode.W then

				State.MoveForward = true

			elseif key == Enum.KeyCode.S then

				State.MoveBackward = true

			elseif key == Enum.KeyCode.A then

				State.MoveLeft = true

			elseif key == Enum.KeyCode.D then

				State.MoveRight = true

			elseif key == Enum.KeyCode.Space then

				State.MoveUp = true

			elseif key ==
				Enum.KeyCode.LeftControl then

				State.MoveDown = true

			end
		end
	end
)

--========================================================--
-- KEYBOARD RELEASE
--========================================================--

UserInputService.InputEnded:Connect(

	function(input)

		local key =
			input.KeyCode

		if key == Enum.KeyCode.W then

			State.MoveForward = false

		elseif key == Enum.KeyCode.S then

			State.MoveBackward = false

		elseif key == Enum.KeyCode.A then

			State.MoveLeft = false

		elseif key == Enum.KeyCode.D then

			State.MoveRight = false

		elseif key == Enum.KeyCode.Space then

			State.MoveUp = false

		elseif key ==
			Enum.KeyCode.LeftControl then

			State.MoveDown = false

		end
	end
)

--========================================================--
-- RIGHT CLICK + MOUSE
--========================================================--

local MouseSensitivity = 0.0025

UserInputService.InputBegan:Connect(

	function(input, processed)

		if processed then
			return
		end

		if not State.Freecam then
			return
		end

		if input.UserInputType ==
			Enum.UserInputType.MouseButton2 then

			State.RightMouseHeld = true

			UserInputService.MouseBehavior =
				Enum.MouseBehavior.LockCurrentPosition

		end
	end
)

UserInputService.InputEnded:Connect(

	function(input)

		if input.UserInputType ==
			Enum.UserInputType.MouseButton2 then

			State.RightMouseHeld = false

			UserInputService.MouseBehavior =
				Enum.MouseBehavior.Default

		end
	end
)

UserInputService.InputChanged:Connect(

	function(input)

		if not State.Freecam then
			return
		end

		if not State.RightMouseHeld then
			return
		end

		if input.UserInputType ==
			Enum.UserInputType.MouseMovement then

			State.CameraRotation +=
				Vector2.new(

					-input.Delta.Y
						* MouseSensitivity,

					-input.Delta.X
						* MouseSensitivity

				)

			State.CameraRotation =
				Vector2.new(

					math.clamp(

						State.CameraRotation.X,

						-1.45,

						1.45

					),

					State.CameraRotation.Y

				)

		end
	end
)

--========================================================--
-- FREECAM UPDATE
--========================================================--

local function updateFreecam(deltaTime)

	if not State.Freecam then
		return
	end

	if not State.CameraPosition then

		State.CameraPosition =
			Camera.CFrame.Position

	end

	--====================================================--
	-- ROTACIÓN
	--====================================================--

	local pitch =
		State.CameraRotation.X

	local yaw =
		State.CameraRotation.Y

	-- IMPORTANTE:
	-- primero YAW y después PITCH.
	--
	-- Esto evita que la cámara se incline
	-- hacia los lados.

	local rotation =
		CFrame.Angles(
			0,
			yaw,
			0
		)
		*
		CFrame.Angles(
			pitch,
			0,
			0
		)

	--====================================================--
	-- MOVIMIENTO
	--====================================================--

	local movement =
		Vector3.zero

	if State.MoveForward then

		movement +=
			Vector3.new(
				0,
				0,
				-1
			)

	end

	if State.MoveBackward then

		movement +=
			Vector3.new(
				0,
				0,
				1
			)

	end

	if State.MoveLeft then

		movement +=
			Vector3.new(
				-1,
				0,
				0
			)

	end

	if State.MoveRight then

		movement +=
			Vector3.new(
				1,
				0,
				0
			)

	end

	if State.MoveUp then

		movement +=
			Vector3.new(
				0,
				1,
				0
			)

	end

	if State.MoveDown then

		movement +=
			Vector3.new(
				0,
				-1,
				0
			)

	end

	if movement.Magnitude > 0 then

		movement =
			movement.Unit

		local speed =
			40
			*
			CONFIG.CameraSpeed

		local worldMovement =
			rotation:VectorToWorldSpace(
				movement
			)

		State.CameraPosition +=
			worldMovement
			*
			speed
			*
			deltaTime

	end

	--====================================================--
	-- APLICAR CÁMARA
	--====================================================--

	Camera.CFrame =
		CFrame.new(
			State.CameraPosition
		)
		*
		rotation

end

--========================================================--
-- FLY UPDATE
--========================================================--

local function updateFly()

	if not State.Flying then
		return
	end

	local root =
		getRoot()

	if not root then
		return
	end

	local movement =
		Vector3.zero

	if State.MoveForward then

		movement +=
			Camera.CFrame.LookVector

	end

	if State.MoveBackward then

		movement -=
			Camera.CFrame.LookVector

	end

	if State.MoveRight then

		movement +=
			Camera.CFrame.RightVector

	end

	if State.MoveLeft then

		movement -=
			Camera.CFrame.RightVector

	end

	if State.MoveUp then

		movement +=
			Vector3.new(
				0,
				1,
				0
			)

	end

	if State.MoveDown then

		movement -=
			Vector3.new(
				0,
				1,
				0
			)

	end

	if movement.Magnitude > 0 then

		movement =
			movement.Unit

	end

	root.AssemblyLinearVelocity =
		movement
		*
		CONFIG.FlySpeed

end

--========================================================--
-- NOCLIP
--========================================================--

local function applyNoclip()

	if not State.Noclip then
		return
	end

	local character =
		LocalPlayer.Character

	if not character then
		return
	end

	for _, part in ipairs(
		character:GetDescendants()
	) do

		if part:IsA("BasePart") then

			part.CanCollide = false

		end
	end
end

--========================================================--
-- RENDER LOOP
--========================================================--

RunService.RenderStepped:Connect(

	function(deltaTime)

		if State.Freecam then

			updateFreecam(
				deltaTime
			)

		end

		if State.Flying then

			updateFly()

		end

		if State.Noclip then

			applyNoclip()

		end

	end
)

--========================================================--
-- RESPAWN
--========================================================--

LocalPlayer.CharacterAdded:Connect(

	function(character)

		State.Freecam = false

		State.Flying = false

		State.Noclip = false

		State.Spectating = false

		State.SpectatePlayer = nil

		State.RightMouseHeld = false

		State.MoveForward = false
		State.MoveBackward = false
		State.MoveLeft = false
		State.MoveRight = false
		State.MoveUp = false
		State.MoveDown = false

		State.CameraPosition = nil

		State.FreecamCharacterCFrame =
			nil

		UserInputService.MouseBehavior =
			Enum.MouseBehavior.Default

		task.wait(0.5)

		local humanoid =
			character:FindFirstChildOfClass(
				"Humanoid"
			)

		local root =
			character:FindFirstChild(
				"HumanoidRootPart"
			)

		if root then

			root.Anchored = false

		end

		if humanoid then

			humanoid.PlatformStand =
				false

			humanoid.AutoRotate =
				true

			humanoid.WalkSpeed =
				CONFIG.WalkSpeed

			humanoid.JumpPower =
				CONFIG.JumpPower

		end

		Camera.CameraType =
			Enum.CameraType.Custom

		if humanoid then

			Camera.CameraSubject =
				humanoid

		end

		FreecamButton.Text =
			"🎥 FREE CAMERA : OFF"

		FlyButton.Text =
			"✈ FLY : OFF"

		NoclipButton.Text =
			"👻 NOCLIP : OFF"

		FreecamButton:SetAttribute(
			"Active",
			false
		)

		FlyButton:SetAttribute(
			"Active",
			false
		)

		NoclipButton:SetAttribute(
			"Active",
			false
		)

	end
)

--========================================================--
-- INITIAL
--========================================================--

CameraPage.Visible = true

--========================================================--
-- NOTIFICATION
--========================================================--

task.spawn(

	function()

		pcall(

			function()

				StarterGui:SetCore(

					"SendNotification",

					{

						Title =
							"VERIFIED CREATOR",

						Text =
							"Creator Panel cargado correctamente.",

						Duration = 4,

					}

				)

			end

		)

	end
)

--========================================================--
-- CONSOLE
--========================================================--

print(
	"========================================"
)

print(
	" VERIFIED CREATOR PANEL V4"
)

print(
	"========================================"
)

print(
	"C = Freecam"
)

print(
	"W A S D = Movimiento"
)

print(
	"SPACE = Subir"
)

print(
	"CTRL = Bajar"
)

print(
	"RMB + Mouse = Mirar"
)

print(
	"RightShift = Mostrar/Ocultar GUI"
)

print(
	"========================================"
)

Features & Information

This is a script that has free camera capability; it also includes various options such as flying or noclip mode, the ability to spectate any player, etc. Show less Show changelog and it can only be used on PC

Community Comments (1)

FluxDevFluxDevSep 2, 2026

Hello

More Scripts for [UP] Just a baseplate.