Monster Datang
Pelajaran 9 dari 25 dalam kursus Game Roblox: Kabur dari Kegelapan di Coddy.
Sekarang monsternya. ServerStorage.Shadow adalah model gelap yang tinggi dengan Humanoid, jadi ia berjalan menggunakan Humanoid:MoveTo seperti NPC lainnya.
Saat ruangan Settings.MonsterFrom (4) terbuka, monster itu masuk dari belakang para pemain: di pintu masuk ruangan yang letaknya dua ruangan sebelum ruangan terbaru. Perulangan pada ruangan menemukan ruangan itu melalui Number:
for _, room in rooms:GetChildren() do
if room:GetAttribute("Number") == count - 2 then
behind = room
end
endTitik pivot model berada di tengahnya, jadi model bergerak ke titik 3.1 stud di atas pintu masuk agar berdiri di lantai. Kecepatannya diatur menggunakan nilai Settings.MonsterSpeed pada WalkSpeed milik Humanoid-nya.
Tantangan
SedangMonster muncul di belakangmu.
- Tambahkan
local monster = nildi bagian atas. - Di atas
addRoom, tulisspawnMonster(): klonServerStorage.Shadowke dalammonsterdiEntrance.CFrame + Vector3.new(0, 3.1, 0)dari ruangancount - 2; WalkSpeedSettings.MonsterSpeed; jadikan workspace sebagai parent-nya. - Di
addRoom, panggil fungsi itu saatcount == Settings.MonsterFrom.
Tekan tombol “Main” dan lewati ruangan 3: Shadow berdiri dua ruangan di belakangmu. Lalu tekan tombol “Periksa”.
Coba sendiri
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 -- ruangan terbaru
local count = 0 -- jumlah ruangan yang sudah dibuat
-- Malam tiba: tanpa matahari, sedikit cahaya di mana-mana, dan kabut
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")
-- Alat yang dibawa pemain: di tangan atau di Backpack
local function findTool(player, name)
return (player.Character and player.Character:FindFirstChild(name)) or player.Backpack:FindFirstChild(name)
end
-- Ayunkan pintu hingga terbuka pada engselnya
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
-- Pelajaran 9: The Monster Comes ditempatkan di sini
local addRoom -- ditulis di bawah: pintu menambahkan ruangan, dan setiap ruangan memiliki pintu
-- Apa yang dilakukan pintu saat pemain membukanya
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)
-- Saat pemain memasuki ruangan, ruangan itu menjadi Room dan titik respawn pemain
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)
-- Ruangan baru di pintu keluar ruangan terbaru
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)
-- ruangan terkunci menyimpan kuncinya di dalam
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
-- pertahankan ruangan terbaru dan KeepRooms ruangan di belakangnya
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
-- Setiap pemain: Room di papan peringkat dan senter setiap kali hidup kembali
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)
Semua pelajaran di Game Roblox: Kabur dari Kegelapan
3Monster
Monster DatangLatihan sendiri: Playground Roblox