CCCPaste

Hide System(Local Script)

-- LOCAL SCRIPT --

local tweenService = game:GetService("TweenService")
local userInputService = game:GetService("UserInputService")
local replicatedStorage = game:GetService("ReplicatedStorage")

local event = replicatedStorage:WaitForChild("HideEvent")

local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()

local effect = script.Parent.Effect
local camera = workspace.CurrentCamera

local keyConnection = nil
local keys = {Enum.KeyCode.W, Enum.KeyCode.A, Enum.KeyCode.D, Enum.KeyCode.S}

event.OnClientEvent:Connect(function(model)
	camera.CameraType = Enum.CameraType.Scriptable
	camera.CameraSubject = model.InsideCamera
	
	for i, v in pairs(character:GetDescendants()) do
		if v:IsA("BasePart") or v:IsA("Decal") then
			v.Transparency = 1
		end
	end
	
	local tweenInfo = TweenInfo.new(1, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)
	tweenService:Create(camera, tweenInfo, {CFrame = model.InsideCamera.CFrame}):Play()
	
	for i = 1, 0, -0.01 do
		effect.BackgroundTransparency = i
		task.wait()
	end
	
	task.wait(0.7)
	
	keyConnection = userInputService.InputBegan:Connect(function(input)
		if table.find(keys, input.KeyCode) then
			keyConnection:Disconnect()
			event:FireServer(model)
			
			local tweenInfo = TweenInfo.new(1, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)
			tweenService:Create(camera, tweenInfo, {CFrame = model.OutsideCamera.CFrame}):Play()
			
			task.spawn(function()
				for i = 0, 1, 0.01 do
					effect.BackgroundTransparency = i
					task.wait()
				end
			end)
			
			task.wait(tweenInfo.Time)
			
			camera.CameraType = Enum.CameraType.Custom
			camera.CameraSubject = character			
			
			for i, v in pairs(character:GetDescendants()) do
				if v.Name ~= "HumanoidRootPart" and (v:IsA("BasePart") or v:IsA("Decal")) then
					v.Transparency = 0
				end
			end
		end
	end)
end)