CCCPaste

Hide System(Server Script-Rainbow Friends)

-- SERVER SCRIPT --

local tweenSerice = game:GetService("TweenService")
local replicatedStorage = game:GetService("ReplicatedStorage")

local event = replicatedStorage:WaitForChild("HideEvent")
local closets = script.Parent:GetChildren()

local function Animation(model, action)
	local hinge1 = model:WaitForChild("Hinge1")
	local hinge2 = model:WaitForChild("Hinge2")
	
	if action == "Exit" then
		local tweenInfo = TweenInfo.new(0.5, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)
		tweenSerice:Create(hinge1, tweenInfo, {CFrame = hinge1.CFrame * CFrame.Angles(0, math.rad(80), 0)}):Play()
		tweenSerice:Create(hinge2, tweenInfo, {CFrame = hinge2.CFrame * CFrame.Angles(0, math.rad(-80), 0)}):Play()

		task.wait(tweenInfo.Time)
		
		local tweenInfo = TweenInfo.new(0.5, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)
		tweenSerice:Create(hinge1, tweenInfo, {CFrame = hinge1.CFrame * CFrame.Angles(0, math.rad(-100), 0)}):Play()
		tweenSerice:Create(hinge2, tweenInfo, {CFrame = hinge2.CFrame * CFrame.Angles(0, math.rad(100), 0)}):Play()
	elseif action == "Enter" then
		local tweenInfo = TweenInfo.new(0.5, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)
		tweenSerice:Create(hinge1, tweenInfo, {CFrame = hinge1.CFrame * CFrame.Angles(0, math.rad(100), 0)}):Play()
		tweenSerice:Create(hinge2, tweenInfo, {CFrame = hinge2.CFrame * CFrame.Angles(0, math.rad(-100), 0)}):Play()

		task.wait(tweenInfo.Time)

		local tweenInfo = TweenInfo.new(0.5, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)
		tweenSerice:Create(hinge1, tweenInfo, {CFrame = hinge1.CFrame * CFrame.Angles(0, math.rad(-80), 0)}):Play()
		tweenSerice:Create(hinge2, tweenInfo, {CFrame = hinge2.CFrame * CFrame.Angles(0, math.rad(80), 0)}):Play()
	end
end

for i, v in pairs(closets) do
	if v:IsA("Model") then
		local playerHiding = nil
		local prompt = v.PromptPart.Prompt
		
		prompt.Triggered:Connect(function(player)
			local character = player.Character
			if not character then return end
			
			if not playerHiding then
				prompt.Enabled = false
				playerHiding = player
				player.Hiding.Value = true
				
				character:PivotTo(v.InsidePos.CFrame)
				character.Humanoid.WalkSpeed = 0
				character.Humanoid.JumpPower = 0
				
				event:FireClient(player, v)
				Animation(v, "Enter")
				
				task.wait(0.7)
				
				event.OnServerEvent:Connect(function(player, model)
					if model == v then
						character:PivotTo(v.OutsidePos.CFrame)
						Animation(v, "Exit")
						
						character.Humanoid.WalkSpeed = game.StarterPlayer.CharacterWalkSpeed
						character.Humanoid.JumpPower = game.StarterPlayer.CharacterJumpPower
						
						task.wait(1.5)
						
						prompt.Enabled = true
						playerHiding = nil
						player.Hiding.Value = false
					end
				end)
			end
		end)
	end
end

game.Players.PlayerAdded:Connect(function(player)
	local hiding = Instance.new("BoolValue", player)
	hiding.Name = "Hiding"
	hiding.Value = false
end)