Menu
CoddyTech

Ordenar

Lección 7 de 20 del curso Juego de Roblox: Escapa de la oscuridad de Coddy.

Cada puerta añade una sala, y ninguna desaparece: una partida larga llenaría el juego de salas que nadie volverá a ver. Conserva la sala más reciente y las Settings.KeepRooms que la preceden, y destruye el resto:

for _, old in rooms:GetChildren() do
	if old:GetAttribute("Number") < count - Settings.KeepRooms then
		old:Destroy()
	end
end

La sala de espera es la sala 0, así que también desaparece cuando el jugador avanza lo suficiente. Las salas a las que los jugadores pueden llegar se conservan.

challenge icon

Desafío

Intermedio

Al final de addRoom, antes de que devuelva el resultado, destruye todas las habitaciones cuyo número sea menor que count - Settings.KeepRooms.

Pulsa Play y después Check.

Pruébalo tú mismo

local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Lighting = game:GetService("Lighting")
local TweenService = game:GetService("TweenService")
local Settings = require(game.ReplicatedStorage.Settings)

local rooms = workspace.Rooms
local lastRoom = rooms.Lobby -- la habitación más reciente
local count = 0 -- habitaciones creadas hasta ahora

-- Cae la noche: no hay sol, hay un poco de luz por todas partes y niebla
Lighting.ClockTime = Settings.ClockTime
Lighting.Ambient = Settings.Ambient
Lighting.OutdoorAmbient = Settings.Ambient
Lighting.FogColor = Color3.new(0, 0, 0)
Lighting.FogEnd = Settings.FogEnd
print("Lights out")

-- Abre una puerta girándola sobre sus bisagras
local function openDoor(door)
	door:SetAttribute("Open", true)
	door.Panel.Prompt.Enabled = false
	local hinge, panel = door.Hinge, door.Panel
	local goal = hinge.CFrame * CFrame.Angles(0, math.rad(90), 0) * hinge.CFrame:ToObjectSpace(panel.CFrame)
	TweenService:Create(panel, TweenInfo.new(0.6), { CFrame = goal }):Play()
end

local addRoom -- definido más abajo: una puerta añade una habitación, y una habitación tiene una puerta

-- Qué hace una puerta cuando un jugador la abre
local function setupDoor(door)
	door.Panel.Prompt.Triggered:Connect(function(player)
		if door:GetAttribute("Open") then
			return
		end
		if door.Parent == lastRoom then
			addRoom()
		end
		openDoor(door)
	end)
end
setupDoor(workspace.Rooms.Lobby.Door)

-- Al entrar en una habitación: se convierte en la Room del jugador y en su punto de reaparición
local function setupEntry(room)
	room.Entry.Touched:Connect(function(hit)
		local player = Players:GetPlayerFromCharacter(hit.Parent)
		if player then
			local number = room:GetAttribute("Number")
			player.leaderstats.Room.Value = number
			player.RespawnLocation = room.Checkpoint
		end
	end)
end
setupEntry(workspace.Rooms.Lobby)

-- Una nueva habitación a la salida de la más reciente
function addRoom()
	count += 1
	local name = Settings.Order[(count - 1) % #Settings.Order + 1]
	if count >= Settings.RoomsToEscape then
		name = "Exit"
	end
	local room = ServerStorage.Rooms[name]:Clone()
	room:PivotTo(lastRoom.Exit.CFrame)
	room:SetAttribute("Number", count)
	room.Sign.SurfaceGui.Number.Text = "Room " .. count
	room.Parent = rooms
	lastRoom = room
	setupDoor(room.Door)
	setupEntry(room)
	return room
end

-- Cada jugador: Room en la tabla de clasificación y una linterna en cada vida
Players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local room = Instance.new("IntValue")
	room.Name = "Room"
	room.Parent = leaderstats

	player.CharacterAdded:Connect(function()
		local flashlight = ServerStorage.Flashlight:Clone()
		flashlight.Parent = player.Backpack
		local beam = flashlight.Handle.Beam
		flashlight.Activated:Connect(function()
			beam.Enabled = not beam.Enabled
		end)
	end)
end)
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Juego de Roblox: Escapa de la oscuridad