Quick actions

cmd+k|ctrl+k

Navigation

Languages

random obby

Snippet info

Language

Lua

Visibility

public

Author

thosewhoknow

Created

2022-08-09T12:02:25.637687Z

Updated

2024-02-12T14:01:49.358955Z

do
	local PhysicsService = game:GetService("PhysicsService")
	local PlayerService = game:GetService("Players")
	pcall(function()
		PhysicsService:RemoveCollisionGroup("PlayerCharacters")
	end)
	PhysicsService:CreateCollisionGroup("PlayerCharacters")
	PhysicsService:CollisionGroupSetCollidable("PlayerCharacters", "PlayerCharacters", false)
	local function characterAdded(character)
		for _, bodyPart in pairs(character:GetChildren()) do
			if bodyPart:IsA("BasePart") then
			    bodyPart.CollisionGroup = "PlayerCharacters"
			end
		end
	end
	local function playerAdded(player)
		player.CharacterAdded:Connect(characterAdded)
		if player.Character then
			characterAdded(player.Character)
		end
	end
	for _, player in pairs(PlayerService:GetPlayers()) do
		playerAdded(player)
	end
	PlayerService.PlayerAdded:Connect(playerAdded)
end
local Floors = 10
local Rounds = 3
local PlayingRoundMode=  true
local lighting = game:GetService("Lighting")
local Parts = 10
local Randomizer = Random.new()
local Color1 = Color3.new(Randomizer:NextNumber(),Randomizer:NextNumber(),Randomizer:NextNumber())
local Color2 = Color3.new(Randomizer:NextNumber(),Randomizer:NextNumber(),Randomizer:NextNumber())
function Studify(Parts)
	for i,Part in pairs(Parts) do
		Part.TopSurface = Enum.SurfaceType.Studs
		Part.BottomSurface = Enum.SurfaceType.Studs
		Part.FrontSurface = Enum.SurfaceType.Studs
		Part.BackSurface = Enum.SurfaceType.Studs
		Part.LeftSurface = Enum.SurfaceType.Studs
		Part.RightSurface = Enum.SurfaceType.Studs
		Part.CastShadow = false
	end
end
local Tower = Instance.new("Folder",script)
Tower.Name = "Tower"
script.Name = "randomobbies"
local YOffset = -16
local CF = CFrame.new()
function new(i, p)
	local n = Instance.new(i)
	for j,v in pairs(p) do
		n[j] = v
	end
	return n
end
function getmax(t)
	local maxval, key = -math.huge, nil
	for k,v in pairs(t) do
		if v > maxval then
			maxval, key = v, k
		end
	end
	return key, maxval
end
function FUNNYSTART(b)
	local hahaha = {
		"On your marks!",
		"Get set!"
	}
	for joe = 1, 2 do
		b.Text = hahaha[joe]
		game:GetService("Debris"):AddItem(new("Sound", {
			Parent = script,
			Volume = 2,
			PlayOnRemove = true,
			PlaybackSpeed = 1.25,
			SoundId = "rbxasset://sounds/bass.wav"
		}), 0)
		task.wait(1)
	end
	task.wait(1)
	b.Text = "GO!!!!!"
	for _ = 1, 5 do
		game:GetService("Debris"):AddItem(new("Sound", {
			Parent = script,
			Volume = 2,
			PlayOnRemove = true,
			PlaybackSpeed = 1.5,
			SoundId = "rbxasset://sounds/bass.wav"
		}), 0)
		task.wait(0.1)
	end
end
local CheckpointsHit = {}
local TotalCheckpoints = 0
local phys = PhysicalProperties.new(0.7, 0.3, 1, 1, 1)
function CreateWalls(round)
	if owner.Character then
		CF = CFrame.new(owner.Character.Head.Position)
	else
		CF = CFrame.new(0, 1, 0)
	end
	Color1 = Color3.new(Randomizer:NextNumber(),Randomizer:NextNumber(),Randomizer:NextNumber())
	Color2 = Color3.new(Randomizer:NextNumber(),Randomizer:NextNumber(),Randomizer:NextNumber())
	local LY = 16
	local LX,LZ = 0,0
	local PartPlaces = {}
	TotalCheckpoints = math.round((Floors*Parts)/4)
	CheckpointsHit = {}
	local PartsP = {}
	local Winner = ""
	local doingstuff = true
	local h = Instance.new("Hint",script)
	task.spawn(function()
		for _,pl in game:GetService("Players"):GetPlayers() do
			PartPlaces[pl.Name] = 0
		end
		for _,pl in game:GetService("Players"):GetPlayers() do
			CheckpointsHit[pl.Name] = {}
		end
		task.spawn(function()
			FUNNYSTART(h)
			task.wait(0.5)
			doingstuff = false
		end)
		while task.wait(0.2) do
			if Winner ~= "" then
				break
			end
			local form = "Highest player: %s with %s parts climbed! | Round: %s"
			local hp, hv = getmax(PartPlaces)
			if doingstuff == false then h.Text = form:format(hp or "", hv or 0, round) end
		end
		h.Text = ("Congratulations! %s has beat the obby!"):format(Winner)
		game:GetService("Debris"):AddItem(new("Sound", {
			Parent = script,
			Volume = 3,
			PlayOnRemove = true,
			SoundId = "rbxasset://sounds/victory.wav"
		}), 0)
		task.wait(3)
		if PlayingRoundMode == false or round >= Rounds then
			h:Destroy()
		end
		for i,v in pairs(PartsP) do
			game:GetService("Debris"):AddItem(new("Sound", {
				Parent = v,
				Volume = 2,
				PlayOnRemove = true,
				PlaybackSpeed = Randomizer:NextNumber(0.85, 1.25),
				SoundId = "rbxasset://sounds/snap.wav"
			}), 0)
			v.Anchored = false
			v.CustomPhysicalProperties = phys
			game:GetService("Debris"):AddItem(v, 5)
			task.wait(0.05)
		end
		print("Starting new round")
		doingstuff = true
		if PlayingRoundMode == true and round < Rounds then
			for i = 29, 1, -1 do
				h.Text = ("Starting next round in %s seconds..."):format(i)
				task.wait(1)
			end
			Floors = Floors * 1.5
			h:Destroy()
			doingstuff = false
			CreateWalls(round+1)
		end
	end)
	local Start = tick()
	local TotalNum = 0
	for i = 1,Floors do
			for j = 0,Parts do
				local parttype = Randomizer:NextInteger(1,5)
				local p
				if parttype == 5 or (i == 1 and j == 0) then
					p = Instance.new("TrussPart",Tower)
				else
					p = Instance.new("Part",Tower)
					local jam = math.random(1,3)
					if jam == 1 then
						p.Shape = Enum.PartType.Ball
					elseif jam == 2 then
						p.Shape = Enum.PartType.Cylinder
					end
				end
				local hbr, sbr, vbr = (Color1:Lerp(Color2,math.clamp(i/Floors,0,1))):ToHSV()
				local tn = TotalNum
				if tn%4==0 then
					p.Color = Color3.fromHSV(hbr, sbr, vbr/1.5)
				else
					p.Color = Color3.fromHSV(hbr, sbr, vbr)
				end
				local light = Instance.new("PointLight")
				light.Brightness = 1
				light.Range = 10
				light.Color = p.Color
				light.Enabled = false
				light.Parent = p
				p.Anchored = true
				if p.ClassName == "Part" and p.Shape ~= Enum.PartType.Block then
					p.Size = Vector3.new(Randomizer:NextInteger(2,5),Randomizer:NextInteger(2,5),Randomizer:NextInteger(2,5))
				else
					p.Size = Vector3.new(Randomizer:NextInteger(1,5),Randomizer:NextInteger(1,8),Randomizer:NextInteger(1,5))
				end
				p.Touched:Connect(function(hit)
					if game:GetService("Players"):GetPlayerFromCharacter(hit.Parent) then
						if tn % 4 == 0 then
							if not CheckpointsHit[hit.Parent.Name] then return end
							if CheckpointsHit[hit.Parent.Name][math.round(tn/4)] ~= true then
								game:GetService("Debris"):AddItem(new("Sound", {
									Parent = p,
									Volume = 1,
									PlayOnRemove = true,
									SoundId = "rbxasset://sounds/button.wav"
								}), 0)
							end
							CheckpointsHit[hit.Parent.Name][math.round(tn/4)] = true
						end
						PartPlaces[hit.Parent.Name] = tn
					end
				end)
				CF = CF * CFrame.new(math.random(-3, 3),math.random(0,5),math.random(6,9))
				if i % 4 == 0 then
					CF = CF * CFrame.Angles(0, math.rad(math.random(-1, 1)*45), 0)
				end
				p.CFrame = CF
				Studify({p})
				task.spawn(function()
					while task.wait() do
						if lighting.ClockTime <= 6 or lighting.ClockTime >= 18 then
							light.Enabled = true
						else
							light.Enabled = false
						end
					end
				end)
				if i == Floors and j == Parts then
					
					task.spawn(function()
						p.Touched:Connect(function(hit)
							if game:GetService("Players"):GetPlayerFromCharacter(hit.Parent) then
								if #CheckpointsHit[hit.Parent.Name] < TotalCheckpoints then
									task.spawn(function()
										doingstuff = true
										game:GetService("Debris"):AddItem(new("Sound", {
											Parent = script,
											Volume = 1,
											PlayOnRemove = true,
											PlaybackSpeed = Randomizer:NextNumber(0.85, 1.25),
											SoundId = "rbxassetid://8622490283"
										}), 0)
										h.Text = ("%s got yeeted by the anti-cheat system."):format(hit.Parent.Name)
										game:GetService("Players"):GetPlayerFromCharacter(hit.Parent):Explode()
										task.wait(3)
										doingstuff = false
									end)
								else
									Winner = hit.Parent.Name
								end
							end
						end)
						while task.wait(0.1) do
							p.Material = Enum.Material:GetEnumItems()[math.random(1,#Enum.Material:GetEnumItems())]
							p.BrickColor = BrickColor.random()
						end
					end)
				else
					
				end
				table.insert(PartsP, p)
				TotalNum += 1
				task.wait()
			end
		task.wait()
	end
end
function toboolean(n)
	return (n == "true" and true) or (n == "false" and false) or (n == 1 and true) or (n == 0 and false) or false
end
owner.Chatted:Connect(function(msg)
	local Pre = "ro"
	local Split = msg:split("/")
	if Split[1] == Pre then
		if Split[2] == "partc" then
			Parts = tonumber(Split[3])
		elseif Split[2] == "new" then
			Tower:ClearAllChildren()
			CreateWalls(1)
		elseif Split[2] == "mul" then
			Floors = tonumber(Split[3])
		elseif Split[2] == "rm" then
			PlayingRoundMode = toboolean(Split[3])
		elseif Split[2] == "rounds" then
			Rounds = tonumber(Split[3])
		elseif Split[2] == "skip" then
			local user = Split[3]
			CheckpointsHit[user] = table.create(TotalCheckpoints, true)
		end
	end
end)
INFO