المفاتيح والأقفال
الدرس 8 من 25 في دورة لعبة Roblox: اهرب من الظلام على Coddy.
بعض الغرف مقفلة (القالب Locked): بابها يحمل السمة Locked، والمفتاح موجود في مكان ما بداخلها، عند KeySpot. المفتاح أداة؛ يؤدي الضغط على المطالبة إلى وضعه في حقيبة ظهر اللاعب.
لا يُفتح الباب المقفل إلا للاعب الذي يحمل المفتاح، سواء في يده (داخل شخصيته) أو في حقيبة ظهره. ويستهلك الباب المفتاح:
local key = findTool(player, "Key")
if not key then
return
end
key:Destroy()
door:SetAttribute("Locked", nil)التحدي
متوسطأبقِ الأبواب مقفلة حتى تعثر على مفتاحها.
findTool(player, name): الأداة في Character، وإلا ففي Backpack.- تضع
addRoomنسخة منServerStorage.Keyفي غرفة تحتوي علىKeySpot:key.Handle.CFrame = keySpot.CFrame. - يُعطَّل
Handle.Promptالخاص بها، ثم تُنقل إلى Backpack اللاعب. - في
setupDoor، يحتاج البابLockedإلى المفتاح: أتلفه وأزلLocked.
اضغط «العب» واصل إلى الغرفة 3: يحتاج بابها إلى مفتاحها. ثم اضغط «تحقق».
جرّب بنفسك
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 -- أحدث غرفة
local count = 0 -- الغرف التي أُنشئت حتى الآن
-- يحلّ الليل: لا شمس، وقليل من الضوء في كل مكان، وضباب
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")
-- افتح الباب بتدويره حول مفصلته
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 -- مكتوب أدناه: يضيف الباب غرفة، ولكل غرفة باب
-- ما يحدث عندما يفتح لاعب الباب
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)
-- عند دخول غرفة: تصبح قيمة Room الخاصة باللاعب، ونقطة عودته
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)
-- غرفة جديدة عند مخرج أحدث غرفة
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)
-- الدرس 8: مكان المفاتيح والأقفال هنا
-- احتفظ بأحدث غرفة وKeepRooms من الغرف خلفها
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
-- لكل لاعب: قيمة Room في لوحة المتصدرين، ومصباح يدوي في كل حياة
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)
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس لعبة Roblox: اهرب من الظلام
تدرّب بنفسك: Playground لـ Roblox