Menu
CoddyTech

Kunci dan Gembok

Pelajaran 8 dari 20 dalam kursus Game Roblox: Kabur dari Kegelapan di Coddy.

Beberapa ruangan terkunci (template Locked): pintunya memiliki atribut Locked, dan kuncinya berada di suatu tempat di dalam ruangan, di KeySpot. Kunci tersebut adalah sebuah Tool; menekan prompt-nya akan memasukkan kunci ke Backpack pemain.

Pintu yang terkunci hanya terbuka untuk pemain yang membawa kunci, baik di tangan (di dalam character mereka) maupun di Backpack mereka. Pintu menggunakan kunci itu hingga habis:

local key = findTool(player, "Key")
if not key then
	return
end
key:Destroy()
door:SetAttribute("Locked", nil)
challenge icon

Tantangan

Sedang
  1. Tulis findTool(player, name): cari tool di karakter pemain atau di Backpack-nya.
  2. Di addRoom, jika ruangan memiliki KeySpot, letakkan clone ServerStorage.Key di sana (key.Handle.CFrame = spot.CFrame, dengan parent ruangan); Handle.Prompt-nya menonaktifkan dirinya sendiri dan memindahkan key ke Backpack pemain.
  3. Di setupDoor, sebelum pintu terbuka: pintu yang terkunci memerlukan key, menggunakannya, lalu kehilangan atribut Locked.

Tekan Play dan lewati ruangan 3. Lalu tekan Check.

Coba sendiri

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 -- ruangan terbaru
local count = 0 -- ruangan yang sudah dibuat sejauh ini

-- Malam tiba: tidak ada matahari, sedikit cahaya di mana-mana, dan kabut
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")

-- Ayunkan pintu hingga terbuka pada engselnya
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 -- ditulis di bawah: pintu menambahkan ruangan, dan ruangan memiliki pintu

-- Yang dilakukan pintu saat pemain membukanya
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)

-- Saat pemain memasuki ruangan, ruangan itu menjadi Room dan titik respawn pemain
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)

-- Ruangan baru di pintu keluar ruangan terbaru
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)
	-- pertahankan ruangan terbaru dan KeepRooms ruangan di belakangnya
	for _, old in rooms:GetChildren() do
		if old:GetAttribute("Number") < count - Settings.KeepRooms then
			old:Destroy()
		end
	end
	return room
end

-- Setiap pemain: Room di papan peringkat dan senter setiap kali hidup
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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Game Roblox: Kabur dari Kegelapan

Latihan sendiri: Playground Roblox