Menu
CoddyTech

Clés et serrures

Leçon 8 sur 25 du cours Jeu Roblox : Échappe-toi des ténèbres de Coddy.

Certaines pièces sont verrouillées (le modèle Locked) : leur porte possède l’attribut Locked, et la clé se trouve quelque part à l’intérieur, à un KeySpot. La clé est un Tool ; appuyer sur son invite la place dans le Backpack du joueur.

Une porte verrouillée ne s’ouvre que pour un joueur qui porte la clé, dans sa main (dans son personnage) ou dans son Backpack. La porte la consomme :

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

Défi

Moyen

Verrouille les portes jusqu’à ce que tu trouves leur clé.

  1. findTool(player, name) : l’outil dans son Character, sinon dans son Backpack.
  2. addRoom place un clone de ServerStorage.Key dans une salle contenant un KeySpot : key.Handle.CFrame = keySpot.CFrame.
  3. Son Handle.Prompt se désactive et l’outil est déplacé dans le Backpack du joueur.
  4. Dans setupDoor, une porte Locked nécessite la clé : détruis-la et efface Locked.

Appuie sur Jouer et atteins la salle 3 : sa porte nécessite sa clé. Ensuite, appuie sur Vérifier.

Essayez vous-même

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 salle la plus récente
local count = 0 -- salles créées jusqu’à présent

-- La nuit tombe : plus de soleil, un peu de lumière partout et du brouillard
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")

-- Fais pivoter une porte sur ses gonds pour l’ouvrir
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 -- défini plus bas : une porte ajoute une salle, et chaque salle a une porte

-- Ce qui se passe quand un joueur ouvre une porte
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)

-- Quand un joueur entre dans une salle : elle devient sa Room et son point de réapparition
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)

-- Une nouvelle salle à la sortie de la plus récente
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)
	-- Lesson 8: Keys and Locks se place ici
	-- garde la salle la plus récente et KeepRooms salles derrière elle
	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

-- Chaque joueur : Room dans le classement et une lampe de poche à chaque vie
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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Jeu Roblox : Échappe-toi des ténèbres

Entraînez-vous par vous-même : Playground Roblox