Clés et serrures
Leçon 8 sur 20 du cours Jeu Roblox : Échapper aux 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
Moyen- Écrivez
findTool(player, name): l’outil dans son personnage ou dans son Backpack. - Dans
addRoom, si la pièce a unKeySpot, placez-y un clone deServerStorage.Key(key.Handle.CFrame = spot.CFrame, avec la pièce comme parent) ; sonHandle.Promptse désactive et déplace la clé dans le Backpack du joueur. - Dans
setupDoor, avant que la porte ne s’ouvre : une porte verrouillée nécessite la clé, la consomme et perd son attributLocked.
Appuyez sur Play et traversez la pièce 3. Puis cliquez sur Check.
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 -- nombre de salles créées jusqu’ici
-- 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")
-- Ouvrir une porte en la faisant pivoter sur ses gonds
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 lorsqu’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)
-- Entrer dans une salle : elle devient la Room du joueur 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)
-- conserver la salle la plus récente et KeepRooms salles derrière elle
for _, old in rooms:GetChildren() do
if old:GetAttribute("Number") < count - Settings.KeepRooms then
old:Destroy()
end
end
return room
end
-- Pour chaque joueur : Room dans le classement et une lampe torche à 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.