Menu
CoddyTech

Số phòng

Bài học 6 trên 25 trong khóa học Trò chơi Roblox: thoát khỏi bóng tối của Coddy.

Người chơi cần biết mình đang ở sâu đến đâu. Mỗi phòng có số riêng: dưới dạng thuộc tính, Number, và trên biển báo phía trên cửa phòng (Sign.SurfaceGui.Number).

Mỗi phòng có một phần Entry vô hình nằm cách lối vào một bước chân. Khi cơ thể người chơi chạm vào phần này, phòng đó trở thành Room của họ trên bảng xếp hạng và là điểm lưu của họ: RespawnLocation của người chơi là SpawnLocation mà họ quay lại, và mỗi phòng có một điểm như vậy, Checkpoint.

player.RespawnLocation = room.Checkpoint

Players:GetPlayerFromCharacter(hit.Parent) cho biết cơ thể của ai đã chạm vào phần này, hoặc trả về nil.

challenge icon

Thử thách

Trung bình

Đánh số các căn phòng và biến chúng thành điểm lưu.

  1. Tạo leaderstats cho mỗi người chơi với một IntValue Room.
  2. Trong addRoom, đặt thuộc tính Number thành count và room.Sign.SurfaceGui.Number.Text thành "Room " .. count.
  3. Viết setupEntry(room), gọi hàm này cho Lobby và mỗi căn phòng mới: khi chạm vào room.Entry, đặt Room của người chơi thành Number của căn phòng đó và RespawnLocation thành room.Checkpoint.

Nhấn Chơi và đi vào phòng 1: biển báo và Room của bạn đều hiển thị 1. Sau đó nhấn Kiểm tra.

Tự làm thử

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 -- phòng mới nhất
local count = 0 -- số phòng đã tạo đến lúc này

-- Trời tối: không có ánh nắng, khắp nơi chỉ có chút ánh sáng và sương mù
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")

-- Mở cửa bằng cách xoay quanh bản lề
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 -- viết bên dưới: mở cửa sẽ thêm một phòng, và mỗi phòng đều có cửa

-- Điều xảy ra khi người chơi mở cửa
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)

-- Bài học 6: số phòng nằm ở đây

-- Phòng mới ở lối ra của phòng mới nhất
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

-- Mỗi người chơi: một chiếc đèn pin cho mỗi lần hồi sinh
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)

Tất cả bài học trong Trò chơi Roblox: thoát khỏi bóng tối

Tự luyện tập: Playground Roblox