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)Défi
MoyenVerrouille les portes jusqu’à ce que tu trouves leur clé.
findTool(player, name): l’outil dans son Character, sinon dans son Backpack.addRoomplace un clone deServerStorage.Keydans une salle contenant unKeySpot:key.Handle.CFrame = keySpot.CFrame.- Son
Handle.Promptse désactive et l’outil est déplacé dans le Backpack du joueur. - Dans
setupDoor, une porteLockednécessite la clé : détruis-la et effaceLocked.
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)
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