Chìa khóa và ổ khóa
Bài học 8 trên 25 trong khóa học Trò chơi Roblox: thoát khỏi bóng tối của Coddy.
Một số căn phòng bị khóa (mẫu Locked): cửa của chúng có thuộc tính Locked, còn chìa khóa nằm ở đâu đó bên trong, tại một KeySpot. Chìa khóa là một Tool; nhấn vào lời nhắc của nó sẽ đưa chìa khóa vào Backpack của người chơi.
Cửa bị khóa chỉ mở cho người chơi mang theo chìa khóa, trên tay (trong nhân vật) hoặc trong Backpack. Cửa sẽ tiêu thụ chìa khóa:
local key = findTool(player, "Key")
if not key then
return
end
key:Destroy()
door:SetAttribute("Locked", nil)Thử thách
Trung bìnhKhóa cửa cho đến khi bạn tìm thấy chìa khóa của chúng.
findTool(player, name): công cụ trong Character của họ, nếu không thì trong Backpack.addRoomđặt một bản sao củaServerStorage.Keytrong phòng cóKeySpot:key.Handle.CFrame = keySpot.CFrame.Handle.Promptcủa nó sẽ tắt và chuyển nó vào Backpack của người chơi.- Trong
setupDoor, cửaLockedcần chìa khóa: hủy chìa khóa, xóaLocked.
Nhấn Chơi và đến phòng 3: cửa phòng cần chìa khóa. 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
-- Đêm xuống: không còn ánh mặt trời, ánh sáng mờ khắp nơi và có 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ột cánh cửa tạo thêm một phòng, và mỗi phòng có một cánh 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)
-- Khi người chơi bước vào một phòng: phòng đó trở thành Room và điểm hồi sinh của họ
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)
-- Tạo 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:SetAttribute("Number", count)
room.Sign.SurfaceGui.Number.Text = "Room " .. count
room.Parent = rooms
lastRoom = room
setupDoor(room.Door)
setupEntry(room)
-- Bài học 8: Chìa khóa và ổ khóa sẽ được thêm vào đây
-- giữ lại phòng mới nhất và KeepRooms phòng phía sau
for _, old in rooms:GetChildren() do
local number = old:GetAttribute("Number")
if number < count - Settings.KeepRooms then
print("Room " .. number .. " is gone")
old:Destroy()
end
end
return room
end
-- Mỗi người chơi: Room trên bảng xếp hạng và một chiếc đèn pin mỗi lần hồi sinh
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)
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
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