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.CheckpointPlayers:GetPlayerFromCharacter(hit.Parent) indica de quién es el cuerpo que la tocó, o nil.
Desafío
Intermedio- Asigna
Rooma cada jugador en la tabla de clasificación (un Folder de leaderstats con un IntValue). - En
addRoom, establece el atributoNumberde la sala encounty el texto de su letrero en"Room " .. count(Room 1para la primera). - Escribe
setupEntry(room): cuando un jugador toque suEntry, 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)
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.