Menu
CoddyTech

رتّب المكان

الدرس 7 من 25 في دورة لعبة Roblox: اهرب من الظلام على Coddy.

يضيف كل باب غرفة، ولا تختفي أي غرفة أبدًا؛ لذا فإن اللعب مدة طويلة سيملأ اللعبة بغرف لن يراها أحد مجددًا. احتفظ بأحدث غرفة وبـ Settings.KeepRooms غرفة خلفها، ودمّر الغرف الأخرى:

for _, old in rooms:GetChildren() do
	local number = old:GetAttribute("Number")
	if number < count - Settings.KeepRooms then
		old:Destroy()
	end
end

الردهة هي الغرفة 0، لذا ستُزال هي أيضًا عندما يتقدم اللاعب بما يكفي ويتجاوز الضباب. تعرض رسالة مطبوعة في نافذة Output كل غرفة عند إزالتها.

challenge icon

التحدي

متوسط

أزل الغرف التي لن يراها أحد مرة أخرى.

  1. في نهاية addRoom، قبل أن تُرجع قيمة، كرّر على rooms:GetChildren().
  2. لكل غرفة يكون فيها Number أقل من count - Settings.KeepRooms: اطبع "Room " .. number .. " is gone"، ثم دمّرها.

اضغط «العب» وافتح أربعة أبواب: سيُظهر Output أن الغرفة 0 قد اختفت. ثم اضغط «تحقق».

جرّب بنفسك

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)
	-- الدرس 7: ضع «الترتيب» هنا
	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