Fe chainsaw
Key Required

Fe chainsaw

[UP] Just a baseplate.Little_pancakeLittle_pancake 1.6K views 5.3K executesUpdated Sep 11, 2026
Unrated
00
Lua Script•663 lines (22183 chars)
--========================================================--
-- STRANGE HUB + MOTOSSERRA 3D + ANIMAÇÕES E NOVOS SONS
-- [UP] JUST A BASEPLATE
-- PLACE ID: 123974602339071
--========================================================--

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local CoreGui = game:GetService("CoreGui")
local UserInputService = game:GetService("UserInputService")
local TextChatService = game:GetService("TextChatService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SoundService = game:GetService("SoundService")

local player = Players.LocalPlayer

--========================================================--
-- CONFIGURAÇÃO E VARIÁVEIS GERAIS
--========================================================--

local ALLOWED_PLACE_ID = 123974602339071

local scriptRunning = false
local vrConnections = {}
local activeEffects = {}
local chainsawParts = {}
local vrGuiInstance = nil

local isEquipped = true
local isAttacking = false
local attackStartTime = 0

local isLaughing = false
local laughStartTime = 0

--========================================================--
-- VERIFICAR JOGO
--========================================================--

local function isAllowedGame()
	return game.PlaceId == ALLOWED_PLACE_ID
end

--========================================================--
-- GUI DO HUB PRINCIPAL (LIMPO E COMPACTO)
--========================================================--

local oldGui = player:WaitForChild("PlayerGui"):FindFirstChild("StrangeHub")
if oldGui then oldGui:Destroy() end

local gui = Instance.new("ScreenGui")
gui.Name = "StrangeHub"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.Parent = player.PlayerGui

local panel = Instance.new("Frame")
panel.Name = "MainPanel"
panel.Size = UDim2.new(0, 270, 0, 210)
panel.Position = UDim2.new(0.5, -135, 0.5, -105)
panel.BackgroundColor3 = Color3.fromRGB(18, 18, 23)
panel.BorderSizePixel = 0
panel.Active = true
panel.Draggable = true
panel.Parent = gui

local panelCorner = Instance.new("UICorner")
panelCorner.CornerRadius = UDim.new(0, 16)
panelCorner.Parent = panel

local panelStroke = Instance.new("UIStroke")
panelStroke.Thickness = 2
panelStroke.Transparency = 0.25
panelStroke.Parent = panel

local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -50, 0, 45)
title.Position = UDim2.new(0, 10, 0, 5)
title.BackgroundTransparency = 1
title.Text = "⚡ STRANGE HUB"
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.TextSize = 22
title.Font = Enum.Font.GothamBold
title.Parent = panel

local subtitle = Instance.new("TextLabel")
subtitle.Size = UDim2.new(1, -20, 0, 25)
subtitle.Position = UDim2.new(0, 10, 0, 28)
subtitle.BackgroundTransparency = 1
subtitle.Text = "[UP] JUST A BASEPLATE"
subtitle.TextColor3 = Color3.fromRGB(170, 170, 170)
subtitle.TextSize = 11
subtitle.Font = Enum.Font.Gotham
subtitle.Parent = panel

local minimizeBtn = Instance.new("TextButton")
minimizeBtn.Size = UDim2.new(0, 30, 0, 30)
minimizeBtn.Position = UDim2.new(1, -35, 0, 10)
minimizeBtn.BackgroundColor3 = Color3.fromRGB(40, 40, 48)
minimizeBtn.Text = "—"
minimizeBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
minimizeBtn.TextSize = 14
minimizeBtn.Font = Enum.Font.GothamBold
minimizeBtn.Parent = panel

local minCorner = Instance.new("UICorner")
minCorner.CornerRadius = UDim.new(0, 8)
minCorner.Parent = minimizeBtn

local contentFrame = Instance.new("Frame")
contentFrame.Name = "ContentContainer"
contentFrame.Size = UDim2.new(1, 0, 1, -55)
contentFrame.Position = UDim2.new(0, 0, 0, 55)
contentFrame.BackgroundTransparency = 1
contentFrame.Parent = panel

local status = Instance.new("TextLabel")
status.Size = UDim2.new(1, -20, 0, 22)
status.Position = UDim2.new(0, 10, 0, 2)
status.BackgroundTransparency = 1
status.TextSize = 13
status.Font = Enum.Font.GothamBold
status.Parent = contentFrame

local function createHubButton(text, position)
	local button = Instance.new("TextButton")
	button.Size = UDim2.new(1, -30, 0, 38)
	button.Position = position
	button.BackgroundColor3 = Color3.fromRGB(40, 40, 48)
	button.BorderSizePixel = 0
	button.Text = text
	button.TextColor3 = Color3.fromRGB(255, 255, 255)
	button.TextSize = 13
	button.Font = Enum.Font.GothamBold
	button.AutoButtonColor = true
	button.Parent = contentFrame

	local corner = Instance.new("UICorner")
	corner.CornerRadius = UDim.new(0, 10)
	corner.Parent = button
	return button
end

local executeButton = createHubButton("▶️  EXECUTAR", UDim2.new(0, 15, 0, 28))
local resetButton = createHubButton("🔄  RESETAR", UDim2.new(0, 15, 0, 72))
local stopButton = createHubButton("⏹️  PARAR SCRIPT", UDim2.new(0, 15, 0, 116))

local panelOpen = true
minimizeBtn.MouseButton1Click:Connect(function()
	panelOpen = not panelOpen
	contentFrame.Visible = panelOpen
	if panelOpen then
		panel.Size = UDim2.new(0, 270, 0, 210)
		minimizeBtn.Text = "—"
	else
		panel.Size = UDim2.new(0, 270, 0, 55)
		minimizeBtn.Text = "+"
	end
end)

if isAllowedGame() then
	status.Text = "● PRONTO"
	status.TextColor3 = Color3.fromRGB(80, 255, 130)
else
	status.Text = "🔒 JOGO NÃO COMPATÍVEL"
	status.TextColor3 = Color3.fromRGB(255, 80, 80)
	executeButton.Text = "🔒 PLACE ID INCORRETO"
end

--========================================================--
-- RESET
--========================================================--

local function resetCharacter()
	local character = player.Character
	if character then
		local humanoid = character:FindFirstChildOfClass("Humanoid")
		if humanoid then humanoid.Health = 0 end
	end
end

--========================================================--
-- MODO DE EXECUÇÃO (TEXTOS E MOTOSSERRA)
--========================================================--

local function StartModMode()

	if vrGuiInstance then vrGuiInstance:Destroy() end
	for _, conn in ipairs(vrConnections) do if conn then conn:Disconnect() end end
	table.clear(vrConnections)
	for _, fx in ipairs(activeEffects) do if fx then fx:Destroy() end end
	table.clear(activeEffects)
	table.clear(chainsawParts)
	
	isEquipped = true
	isAttacking = false
	isLaughing = false

	-- SOM DE FUNDO WEIRDO (Mantido para clima)
	local spookySound = Instance.new("Sound")
	spookySound.Name = "StrangeHub_Audio"
	spookySound.SoundId = "rbxassetid://106591379375534"
	spookySound.Volume = 0.5
	spookySound.Looped = true
	spookySound.Parent = SoundService
	spookySound:Play()
	table.insert(activeEffects, spookySound)

	-- NOVO: SOM DA MOTOSSERRA LIGADA (IDLE)
	local chainsawIdleSound = Instance.new("Sound")
	chainsawIdleSound.Name = "Chainsaw_Idle"
	chainsawIdleSound.SoundId = "rbxassetid://129562586053031"
	chainsawIdleSound.Volume = 2
	chainsawIdleSound.Looped = true
	chainsawIdleSound.Parent = SoundService
	chainsawIdleSound:Play()
	table.insert(activeEffects, chainsawIdleSound)

	-- NOVO: SOM DE ATAQUE DA MOTOSSERRA
	local sawAttackSound = Instance.new("Sound")
	sawAttackSound.Name = "Chainsaw_Attack"
	sawAttackSound.SoundId = "rbxassetid://98962162673952"
	sawAttackSound.Volume = 3
	sawAttackSound.Parent = SoundService
	table.insert(activeEffects, sawAttackSound)

	-- GUI DE EFEITOS E BOTÕES DE AÇÃO
	vrGuiInstance = Instance.new("ScreenGui")
	vrGuiInstance.Name = "StrangeHub_Effects"
	vrGuiInstance.ResetOnSpawn = false
	vrGuiInstance.IgnoreGuiInset = true
	vrGuiInstance.ZIndexBehavior = Enum.ZIndexBehavior.Sibling

	pcall(function() vrGuiInstance.Parent = CoreGui end)
	if not vrGuiInstance.Parent then vrGuiInstance.Parent = player:WaitForChild("PlayerGui") end

	-- ESTÁTICA
	local staticFrame = Instance.new("ImageLabel")
	staticFrame.Name = "StaticEffect"
	staticFrame.Size = UDim2.new(1, 0, 1, 0)
	staticFrame.BackgroundTransparency = 1
	staticFrame.Image = "rbxassetid://7335193983"
	staticFrame.ImageTransparency = 0.88
	staticFrame.ScaleType = Enum.ScaleType.Tile
	staticFrame.TileSize = UDim2.new(0, 400, 0, 400)
	staticFrame.ZIndex = 1
	staticFrame.Parent = vrGuiInstance

	-- TEXTO GLITCHADO
	local weirdoText = Instance.new("TextLabel")
	weirdoText.Name = "WeirdoGlitchText"
	weirdoText.Size = UDim2.new(0, 500, 0, 100)
	weirdoText.AnchorPoint = Vector2.new(0.5, 0.5)
	weirdoText.Position = UDim2.new(0.5, 0, 0.15, 0)
	weirdoText.BackgroundTransparency = 1
	weirdoText.Text = "WEIRDO"
	weirdoText.TextColor3 = Color3.fromRGB(255, 255, 255)
	weirdoText.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
	weirdoText.TextStrokeTransparency = 0
	weirdoText.Font = Enum.Font.Creepster
	weirdoText.TextSize = 65
	weirdoText.ZIndex = 5
	weirdoText.Parent = vrGuiInstance

	local weirdoVariations = {"WEIRDO", "W$I%DO", "W3IRD0", "W E I R D O", "W_I_R_D_O", "W#I@D0", "WĘÏRĐØ", "₩€łRĐ0", "W?I!D*", "W E I R D O O O"}

	--====================================================--
	-- BOTÕES DA TELA
	--====================================================--
	
	-- 1. BOTÃO DE ATAQUE (Centro)
	local attackBtn = Instance.new("TextButton")
	attackBtn.Size = UDim2.new(0, 180, 0, 55)
	attackBtn.AnchorPoint = Vector2.new(0.5, 1)
	attackBtn.Position = UDim2.new(0.5, 0, 0.95, 0)
	attackBtn.BackgroundColor3 = Color3.fromRGB(200, 30, 30)
	attackBtn.Text = "🪚 ATACAR!"
	attackBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
	attackBtn.TextSize = 18
	attackBtn.Font = Enum.Font.GothamBlack
	attackBtn.ZIndex = 10
	attackBtn.Parent = vrGuiInstance
	Instance.new("UICorner", attackBtn).CornerRadius = UDim.new(0, 12)
	local str1 = Instance.new("UIStroke", attackBtn)
	str1.Color = Color3.fromRGB(255, 255, 255) str1.Thickness = 2

	-- 2. BOTÃO DE GUARDAR/EQUIPAR (Esquerda)
	local toggleBtn = Instance.new("TextButton")
	toggleBtn.Size = UDim2.new(0, 150, 0, 45)
	toggleBtn.AnchorPoint = Vector2.new(0.5, 1)
	toggleBtn.Position = UDim2.new(0.5, -190, 0.94, 0)
	toggleBtn.BackgroundColor3 = Color3.fromRGB(200, 150, 30)
	toggleBtn.Text = "⬇️ GUARDAR"
	toggleBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
	toggleBtn.TextSize = 14
	toggleBtn.Font = Enum.Font.GothamBold
	toggleBtn.ZIndex = 10
	toggleBtn.Parent = vrGuiInstance
	Instance.new("UICorner", toggleBtn).CornerRadius = UDim.new(0, 10)
	local str2 = Instance.new("UIStroke", toggleBtn)
	str2.Color = Color3.fromRGB(255, 255, 255) str2.Thickness = 2

	-- 3. BOTÃO DE RIR (Direita)
	local laughBtn = Instance.new("TextButton")
	laughBtn.Size = UDim2.new(0, 150, 0, 45)
	laughBtn.AnchorPoint = Vector2.new(0.5, 1)
	laughBtn.Position = UDim2.new(0.5, 190, 0.94, 0)
	laughBtn.BackgroundColor3 = Color3.fromRGB(150, 30, 200)
	laughBtn.Text = "😂 RIR (3s)"
	laughBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
	laughBtn.TextSize = 14
	laughBtn.Font = Enum.Font.GothamBold
	laughBtn.ZIndex = 10
	laughBtn.Parent = vrGuiInstance
	Instance.new("UICorner", laughBtn).CornerRadius = UDim.new(0, 10)
	local str3 = Instance.new("UIStroke", laughBtn)
	str3.Color = Color3.fromRGB(255, 255, 255) str3.Thickness = 2

	-- Eventos dos Botões
	table.insert(vrConnections, attackBtn.MouseButton1Click:Connect(function()
		if not isAttacking and isEquipped and not isLaughing then
			isAttacking = true
			attackStartTime = os.clock()
			sawAttackSound:Play()
		end
	end))

	table.insert(vrConnections, toggleBtn.MouseButton1Click:Connect(function()
		if isAttacking or isLaughing then return end
		isEquipped = not isEquipped

		if isEquipped then
			toggleBtn.Text = "⬇️ GUARDAR"
			toggleBtn.BackgroundColor3 = Color3.fromRGB(200, 150, 30)
			attackBtn.Visible = true
			chainsawIdleSound:Play()
			for _, part in ipairs(chainsawParts) do part.Transparency = 0 end
		else
			toggleBtn.Text = "⬆️ EQUIPAR"
			toggleBtn.BackgroundColor3 = Color3.fromRGB(30, 150, 200)
			attackBtn.Visible = false
			chainsawIdleSound:Stop()
			for _, part in ipairs(chainsawParts) do part.Transparency = 1 end
		end
	end))

	table.insert(vrConnections, laughBtn.MouseButton1Click:Connect(function()
		if not isLaughing and not isAttacking then
			isLaughing = true
			laughStartTime = os.clock()
			
			-- Desliga depois de 3 segundos
			task.delay(3, function()
				isLaughing = false
			end)
		end
	end))


	-- LOOP DO EFEITO VISUAL DA TELA
	local uiRenderConn = RunService.RenderStepped:Connect(function()
		if not scriptRunning then return end
		local t = os.clock()

		if math.random(1, 10) > 7 then
			weirdoText.Text = weirdoVariations[math.random(1, #weirdoVariations)]
		end
		weirdoText.TextColor3 = Color3.fromHSV((t * 0.3) % 1, 1, 1)
		
		local floatX = math.sin(t * 1.5) * 35
		local floatY = math.cos(t * 2) * 15
		weirdoText.Position = UDim2.new(0.5, floatX, 0.15, floatY)
		weirdoText.Rotation = math.sin(t * 2.8) * 12

		staticFrame.ImageTransparency = math.random(85, 93) / 100
		staticFrame.TileSize = UDim2.new(0, math.random(350, 450), 0, math.random(350, 450))
	end)
	table.insert(vrConnections, uiRenderConn)

	--====================================================--
	-- CONSTRUÇÃO DA MOTOSSERRA 3D
	--====================================================--
	local function spawnChainsaw(char, rightArm)
		local chainsaw = Instance.new("Model")
		chainsaw.Name = "ChainsawWeapon"

		-- Corpo da motosserra (Motor)
		local body = Instance.new("Part")
		body.Size = Vector3.new(0.8, 1.2, 2.5)
		body.Color = Color3.fromRGB(200, 30, 30)
		body.Material = Enum.Material.Metal
		body.CanCollide = false
		body.Massless = true
		body.Parent = chainsaw

		-- Lâmina
		local blade = Instance.new("Part")
		blade.Size = Vector3.new(0.1, 0.6, 3.5)
		blade.Color = Color3.fromRGB(120, 120, 120)
		blade.Material = Enum.Material.DiamondPlate
		blade.CanCollide = false
		blade.Massless = true
		blade.Parent = chainsaw

		-- Alça Lateral (Handle)
		local handle = Instance.new("Part")
		handle.Size = Vector3.new(1.2, 0.2, 0.2)
		handle.Color = Color3.fromRGB(20, 20, 20)
		handle.CanCollide = false
		handle.Massless = true
		handle.Parent = chainsaw

		-- Soldas
		local weldArm = Instance.new("Weld")
		weldArm.Part0 = rightArm
		weldArm.Part1 = body
		weldArm.C0 = CFrame.new(0, -1, -0.5) * CFrame.Angles(math.rad(-90), 0, 0)
		weldArm.Parent = body

		local weldBlade = Instance.new("Weld")
		weldBlade.Part0 = body
		weldBlade.Part1 = blade
		weldBlade.C0 = CFrame.new(0, 0, -3)
		weldBlade.Parent = blade

		local weldHandle = Instance.new("Weld")
		weldHandle.Part0 = body
		weldHandle.Part1 = handle
		weldHandle.C0 = CFrame.new(0, 0.6, -0.5)
		weldHandle.Parent = handle

		chainsaw.Parent = char
		table.insert(activeEffects, chainsaw)
		table.insert(chainsawParts, body)
		table.insert(chainsawParts, blade)
		table.insert(chainsawParts, handle)
	end

	--====================================================--
	-- RIG DO PERSONAGEM (BRAÇOS E TORSO MÓVEIS)
	--====================================================--
	local currentRenderConn = nil

	local function setupCharacter(char)
		if currentRenderConn then
			currentRenderConn:Disconnect()
			currentRenderConn = nil
		end

		local humanoid = char:WaitForChild("Humanoid", 8)
		local rootPart = char:WaitForChild("HumanoidRootPart", 8)
		local torso = char:WaitForChild("Torso", 8)
		local rightArm = char:WaitForChild("Right Arm", 8)
		local leftArm = char:WaitForChild("Left Arm", 8)

		if not humanoid or not rootPart or not torso or not rightArm or not leftArm then return end

		-- Gerar Motosserra
		spawnChainsaw(char, rightArm)

		-- Pegar juntas principais (para cabeça e corpo tremerem na risada)
		local neck = torso:FindFirstChild("Neck")
		local rootJoint = rootPart:FindFirstChild("RootJoint")
		local originalNeck = neck and neck.C0 or CFrame.new()
		local originalRoot = rootJoint and rootJoint.C0 or CFrame.new()

		-- Quebrar Ombros para mover livremente
		local rightShoulder = torso:FindFirstChild("Right Shoulder")
		local leftShoulder = torso:FindFirstChild("Left Shoulder")
		if rightShoulder then rightShoulder:Destroy() end
		if leftShoulder then leftShoulder:Destroy() end

		rightArm.CanCollide = false
		leftArm.CanCollide = false

		-- Movers dos braços
		local function createMover(part)
			local bp = Instance.new("BodyPosition")
			bp.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
			bp.P = 25000
			bp.D = 1200
			bp.Position = part.Position
			bp.Parent = part

			local bg = Instance.new("BodyGyro")
			bg.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
			bg.P = 25000
			bg.D = 1200
			bg.CFrame = part.CFrame
			bg.Parent = part

			return bp, bg
		end

		local rightBP, rightBG = createMover(rightArm)
		local leftBP, leftBG = createMover(leftArm)

		local currentRightPosition = rightArm.Position
		local currentLeftPosition = leftArm.Position
		local currentRightCFrame = rightArm.CFrame
		local currentLeftCFrame = leftArm.CFrame

		--================================================--
		-- LÓGICA DE ANIMAÇÃO (LOOP RENDER)
		--================================================--
		currentRenderConn = RunService.RenderStepped:Connect(function()
			if not scriptRunning or not char.Parent or humanoid.Health <= 0 then return end
			local t = os.clock()

			local rightIdleTarget, leftIdleTarget
			local lerpSpeed = 0.15

			-- RESET DA CABEÇA/CORPO (Modificado apenas na risada)
			if neck then neck.C0 = originalNeck end
			if rootJoint then rootJoint.C0 = originalRoot end

			-- 1. PRIORIDADE: RIR
			if isLaughing then
				lerpSpeed = 0.3
				local laughShake = math.sin(t * 25) * 0.05
				local laughTwitch = math.cos(t * 20) * 0.05
				
				-- Joga a cabeça para trás e treme o corpo
				if neck then neck.C0 = originalNeck * CFrame.Angles(math.rad(-30) + laughTwitch, 0, laughShake) end
				if rootJoint then rootJoint.C0 = originalRoot * CFrame.new(0, laughShake, 0) end
				
				-- Mãos na barriga
				rightIdleTarget = torso.CFrame * CFrame.new(0.4, -0.4, -0.6) * CFrame.Angles(math.rad(45) + laughTwitch, math.rad(-45), 0)
				leftIdleTarget = torso.CFrame * CFrame.new(-0.4, -0.4, -0.6) * CFrame.Angles(math.rad(45) + laughTwitch, math.rad(45), 0)

			-- 2. PRIORIDADE: ATACAR
			elseif isAttacking and isEquipped then
				lerpSpeed = 0.4
				local elapsed = t - attackStartTime
				if elapsed < 0.15 then
					-- Puxar motosserra pra trás e pra cima
					rightIdleTarget = torso.CFrame * CFrame.new(1.2, 1.5, 0) * CFrame.Angles(math.rad(160), math.rad(-20), 0)
					leftIdleTarget = torso.CFrame * CFrame.new(-0.2, 1.2, -0.8) * CFrame.Angles(math.rad(130), math.rad(40), 0)
				elseif elapsed < 0.5 then
					-- Golpe rasgando para baixo
					rightIdleTarget = torso.CFrame * CFrame.new(0.5, -1, -2.5) * CFrame.Angles(math.rad(20), math.rad(-30), 0)
					leftIdleTarget = torso.CFrame * CFrame.new(-0.8, -0.5, -1.5) * CFrame.Angles(math.rad(40), math.rad(30), 0)
				else
					isAttacking = false
				end

			-- 3. PRIORIDADE: MOTOSSERRA GUARDADA (Mãos pra trás)
			elseif not isEquipped then
				lerpSpeed = 0.1
				rightIdleTarget = torso.CFrame * CFrame.new(0.5, -0.6, 0.6) * CFrame.Angles(math.rad(-25), 0, math.rad(15))
				leftIdleTarget = torso.CFrame * CFrame.new(-0.5, -0.6, 0.6) * CFrame.Angles(math.rad(-25), 0, math.rad(-15))

			-- 4. PRIORIDADE: MOTOSSERRA EQUIPADA IDLE
			else
				lerpSpeed = 0.15
				local shake = math.random(-8, 8) * 0.01 -- Tremedeira da serra ligada
				local breath = math.sin(t * 3) * 0.05
				
				rightIdleTarget = torso.CFrame * CFrame.new(1, -0.2 + breath, -1) * CFrame.Angles(math.rad(90) + shake, math.rad(-30) + shake, shake)
				leftIdleTarget = torso.CFrame * CFrame.new(-0.2, -0.2 + breath, -1.5) * CFrame.Angles(math.rad(90) + shake, math.rad(40) + shake, shake)
			end

			-- Interpolação suave dos braços
			currentRightPosition = currentRightPosition:Lerp(rightIdleTarget.Position, lerpSpeed)
			currentLeftPosition = currentLeftPosition:Lerp(leftIdleTarget.Position, lerpSpeed)
			currentRightCFrame = currentRightCFrame:Lerp(rightIdleTarget, lerpSpeed)
			currentLeftCFrame = currentLeftCFrame:Lerp(leftIdleTarget, lerpSpeed)

			rightBP.Position = currentRightPosition
			rightBG.CFrame = currentRightCFrame
			leftBP.Position = currentLeftPosition
			leftBG.CFrame = currentLeftCFrame
		end)
		table.insert(vrConnections, currentRenderConn)

		table.insert(vrConnections, char.AncestryChanged:Connect(function(_, parent)
			if not parent and currentRenderConn then
				currentRenderConn:Disconnect()
				currentRenderConn = nil
			end
		end))
	end

	--====================================================--
	-- RESPAWN HANDLE
	--====================================================--
	table.insert(vrConnections, player.CharacterAdded:Connect(function(char)
		task.wait(0.5)
		if scriptRunning then setupCharacter(char) end
	end))

	if player.Character then
		task.spawn(function() setupCharacter(player.Character) end)
	end
end

--========================================================--
-- EXECUTAR / RESETAR / PARAR
--========================================================--

local function executeScript()
	if not isAllowedGame() then
		status.Text = "🔒 JOGO NÃO COMPATÍVEL"
		status.TextColor3 = Color3.fromRGB(255, 80, 80)
		return
	end
	if scriptRunning then
		status.Text = "● SCRIPT JÁ ESTÁ EXECUTANDO"
		status.TextColor3 = Color3.fromRGB(255, 220, 80)
		return
	end

	scriptRunning = true
	status.Text = "● SCRIPT EXECUTANDO"
	status.TextColor3 = Color3.fromRGB(80, 255, 130)

	StartModMode()
end

local function resetScript()
	if not isAllowedGame() then return end
	resetCharacter()
	status.Text = "● PERSONAGEM RESETADO"
	status.TextColor3 = Color3.fromRGB(255, 220, 80)
end

local function stopScript()
	if not scriptRunning then
		status.Text = "● SCRIPT JÁ ESTÁ PARADO"
		status.TextColor3 = Color3.fromRGB(255, 80, 80)
		return
	end

	scriptRunning = false

	for _, conn in ipairs(vrConnections) do
		if conn then conn:Disconnect() end
	end
	table.clear(vrConnections)

	for _, fx in ipairs(activeEffects) do
		if fx then fx:Destroy() end
	end
	table.clear(activeEffects)

	if vrGuiInstance then
		vrGuiInstance:Destroy()
		vrGuiInstance = nil
	end

	resetCharacter()

	status.Text = "● SCRIPT PARADO"
	status.TextColor3 = Color3.fromRGB(255, 80, 80)
end

--========================================================--
-- CONECTAR BOTÕES DO HUB
--========================================================--
executeButton.MouseButton1Click:Connect(executeScript)
resetButton.MouseButton1Click:Connect(resetScript)
stopButton.MouseButton1Click:Connect(stopScript)

Features & Information

Udk

Community Comments (2)

sonik_rafciosonik_rafcioSep 13, 2026

not fe

lightarchives2099lightarchives2099Sep 16, 2026

Holy AI

More Scripts for [UP] Just a baseplate.