Menu
CoddyTech
flag Ar iconالعربيةdown icon

المفاتيح والأقفال

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

بعض الغرف مقفلة (القالب Locked): بابها يحمل السمة Locked، والمفتاح موجود في مكان ما بداخلها، عند KeySpot. المفتاح أداة؛ يؤدي الضغط على المطالبة إلى وضعه في حقيبة ظهر اللاعب.

لا يُفتح الباب المقفل إلا للاعب الذي يحمل المفتاح، سواء في يده (داخل شخصيته) أو في حقيبة ظهره. ويستهلك الباب المفتاح:

local key = findTool(player, "Key")
if not key then
	return
end
key:Destroy()
door:SetAttribute("Locked", nil)
challenge icon

التحدي

متوسط
  1. اكتب findTool(player, name): الأداة الموجودة في شخصية اللاعب أو في حقيبة ظهره.
  2. في addRoom، إذا كانت الغرفة تحتوي على KeySpot، فضع نسخة منه ServerStorage.Key هناك (key.Handle.CFrame = spot.CFrame، واجعل الغرفة هي العنصر الأب له)؛ يقوم Handle.Prompt بإيقاف نفسه ونقل المفتاح إلى حقيبة ظهر اللاعب.
  3. في setupDoor، قبل فتح الباب: يحتاج الباب المقفل إلى المفتاح، ويستهلكه ويفقد السمة Locked.

اضغط على Play واجتز الغرفة 3. ثم اضغط على 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)

-- عند دخول غرفة: تصبح قيمة 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)
	-- احتفظ بأحدث غرفة وKeepRooms غرفةً خلفها
	for _, old in rooms:GetChildren() do
		if old:GetAttribute("Number") < count - Settings.KeepRooms then
			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)
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس لعبة Roblox: اهرب من الظلام