Nadchodzi potwór
Lekcja 9 z 25 w kursie Gra Roblox: Ucieczka z ciemności w Coddy.
Teraz potwór. ServerStorage.Shadow to wysoki, ciemny model z Humanoidem, więc porusza się za pomocą Humanoid:MoveTo, tak jak każdy NPC.
Gdy otwiera się pokój Settings.MonsterFrom (4), potwór pojawia się za graczami: przy wejściu do pokoju znajdującego się dwa pokoje przed najnowszym. Pętla po pokojach znajduje ten pokój na podstawie jego Number:
for _, room in rooms:GetChildren() do
if room:GetAttribute("Number") == count - 2 then
behind = room
end
endPunkt obrotu modelu znajduje się pośrodku, więc model jest umieszczany 3.1 studa nad wejściem, aby stanąć na podłodze. Prędkość potwora jest ustawiona na Settings.MonsterSpeed we właściwości WalkSpeed jego Humanoida.
Wyzwanie
ŚredniPotwór pojawia się za tobą.
- Na górze dodaj
local monster = nil. - Nad
addRoomnapiszspawnMonster(): sklonujServerStorage.ShadowdomonsterprzyEntrance.CFrame + Vector3.new(0, 3.1, 0)pokojucount - 2; ustaw WalkSpeed naSettings.MonsterSpeed; ustaw jego parent na workspace. - W
addRoomwywołaj tę funkcję, gdycount == Settings.MonsterFrom.
Naciśnij „Graj” i przejdź przez pokój 3: Shadow stoi dwa pokoje za tobą. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
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 -- najnowszy pokój
local count = 0 -- pokoje utworzone do tej pory
-- Zapada noc: nie ma słońca, wszędzie jest trochę światła i mgła
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")
-- Przedmiot noszony przez gracza: w dłoni lub w jego Backpack
local function findTool(player, name)
return (player.Character and player.Character:FindFirstChild(name)) or player.Backpack:FindFirstChild(name)
end
-- Otwórz drzwi, obracając je na zawiasie
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
-- Tu należy umieścić Lesson 9: The Monster Comes
local addRoom -- zdefiniowane poniżej: drzwi dodają pokój, a pokój ma drzwi
-- Co się dzieje z drzwiami, gdy gracz je otwiera
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)
-- Wejście do pokoju: staje się on pokojem gracza w Room i jego punktem odrodzenia
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)
-- Nowy pokój przy wyjściu z najnowszego pokoju
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)
-- zamknięty pokój przechowuje swój klucz w środku
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
-- zachowaj najnowszy pokój i KeepRooms pokoi za nim
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
-- Każdy gracz: Room w tabeli wyników i latarka przy każdym odrodzeniu
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)
Wszystkie lekcje w sekcji Gra Roblox: Ucieczka z ciemności
Poćwicz samodzielnie: Edytor online Roblox