قدوم الوحش
الدرس 9 من 25 في دورة لعبة Roblox: اهرب من الظلام على Coddy.
والآن الوحش. ServerStorage.Shadow نموذج طويل داكن يحتوي على كائن Humanoid، لذا فهو يمشي باستخدام Humanoid:MoveTo مثل أي شخصية غير لاعبة.
عندما تُفتح الغرفة Settings.MonsterFrom (4)، يدخل الوحش خلف اللاعبين: عند مدخل الغرفة التي تسبق أحدث غرفة بغرفتين. تعثر حلقة تمر على الغرف على تلك الغرفة باستخدام Number الخاص بها:
for _, room in rooms:GetChildren() do
if room:GetAttribute("Number") == count - 2 then
behind = room
end
endيقع محور النموذج في منتصفه، لذا يرتفع 3.1 وحدات قياس فوق المدخل ليقف على الأرض. ويحافظ على سرعة Settings.MonsterSpeed في خاصية WalkSpeed الخاصة بكائن Humanoid.
التحدي
متوسطيأتي الوحش من خلفك.
- أضف
local monster = nilفي الأعلى. - اكتب
spawnMonster()فوقaddRoom: استنسخServerStorage.ShadowإلىmonsterعندEntrance.CFrame + Vector3.new(0, 3.1, 0)للغرفةcount - 2؛ واجعل WalkSpeed هوSettings.MonsterSpeed؛ ثم اجعل workspace هو الأب. - في
addRoom، استدعِها عندما يكونcount == Settings.MonsterFrom.
اضغط «العب» واجتز الغرفة 3: يقف Shadow على بُعد غرفتين خلفك. ثم اضغط «تحقق».
جرّب بنفسك
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")
-- أداة يحملها اللاعب: في يده أو في Backpack الخاصة به
local function findTool(player, name)
return (player.Character and player.Character:FindFirstChild(name)) or player.Backpack:FindFirstChild(name)
end
-- افتح الباب بتدويره حول مفصلته
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
-- الدرس 9: يأتي الوحش هنا
local addRoom -- مكتوب أدناه: يضيف الباب غرفة، وللغرفة باب
-- ما يفعله الباب عندما يفتحه اللاعب
local function setupDoor(door)
door.Panel.Prompt.Triggered:Connect(function(player)
if door:GetAttribute("Open") then
return
end
if door:GetAttribute("Locked") then
local key = findTool(player, "Key")
if not key then
return
end
key:Destroy()
door:SetAttribute("Locked", nil)
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)
-- تحتفظ الغرفة المقفلة بمفتاحها داخلها
local keySpot = room:FindFirstChild("KeySpot")
if keySpot then
local key = ServerStorage.Key:Clone()
key.Handle.CFrame = keySpot.CFrame
key.Parent = room
key.Handle.Prompt.Triggered:Connect(function(player)
key.Handle.Prompt.Enabled = false
key.Parent = player.Backpack
end)
end
-- احتفظ بأحدث غرفة وبعدد 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