أرقام الغرف
الدرس 6 من 20 في دورة لعبة Roblox: اهرب من الظلام على Coddy.
ينبغي أن يعرف اللاعب مدى عمقه. لكل غرفة رقمها الخاص: كسمة، Number، وعلى اللافتة فوق بابها (Sign.SurfaceGui.Number).
تحتوي كل غرفة على جزء غير مرئي اسمه Entry، يقع على بُعد خطوة داخل مدخلها. عندما يلمسه جسم اللاعب، تصبح تلك الغرفة هي Room الخاصة به على لوحة المتصدرين، ونقطة حفظه: RespawnLocation للاعب هي SpawnLocation التي يعود إليها، ولكل غرفة واحدة اسمها Checkpoint.
player.RespawnLocation = room.Checkpointتُحدّد Players:GetPlayerFromCharacter(hit.Parent) صاحب الجسم الذي لمسه، أو تُرجع nil.
التحدي
متوسط- امنح كل لاعب
Roomفي لوحة المتصدرين (مجلد leaderstats يحتوي على قيمة IntValue). - في
addRoom، عيّن السمةNumberللغرفة إلىcount، واجعل لافتتها"Room " .. count(أيRoom 1للغرفة الأولى). - اكتب
setupEntry(room): عندما يلمس لاعبEntryالخاص بها، عيّن Room لديه إلى رقم الغرفة وRespawnLocation لديه إلى Checkpoint الخاص بها. استدعِها لـ Lobby ولكل غرفة جديدة.
اضغط على Play، ثم Check.
جرّب بنفسك
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)
-- غرفة جديدة عند مخرج أحدث غرفة
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.Parent = rooms
lastRoom = room
setupDoor(room.Door)
return room
end
-- لكل لاعب: مصباح يدوي في كل حياة
Players.PlayerAdded:Connect(function(player)
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)
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.