Menu
CoddyTech

Números de habitación

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

Un jugador debe saber a qué profundidad está. Cada sala tiene su número: como atributo, Number, y en el letrero sobre su puerta (Sign.SurfaceGui.Number).

Cada sala tiene una pieza invisible Entry un paso después de su entrada. Cuando el cuerpo de un jugador la toca, esa sala se convierte en su Room en la tabla de clasificación y en su punto de control: el RespawnLocation de un jugador es el SpawnLocation en el que reaparece, y cada sala tiene uno, Checkpoint.

player.RespawnLocation = room.Checkpoint

Players:GetPlayerFromCharacter(hit.Parent) indica de quién es el cuerpo que la tocó, o nil.

challenge icon

Desafío

Intermedio
  1. Asigna Room a cada jugador en la tabla de clasificación (un Folder de leaderstats con un IntValue).
  2. En addRoom, establece el atributo Number de la sala en count y el texto de su letrero en "Room " .. count (Room 1 para la primera).
  3. Escribe setupEntry(room): cuando un jugador toque su Entry, establece su Room en el número de la sala y su RespawnLocation en su Checkpoint. Llámala para el Lobby y para cada sala nueva.

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 sala más reciente
local count = 0 -- salas 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 su bisagra
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 -- se define más abajo: una puerta añade una sala, y una sala 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)

-- Una sala nueva 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.Parent = rooms
	lastRoom = room
	setupDoor(room.Door)
	return room
end

-- Cada jugador: una linterna en cada vida
Players.PlayerAdded:Connect(function(player)
	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