Menu
CoddyTech

Posprzątaj

Lekcja 7 z 20 w kursie Gra Roblox: Ucieczka z mroku w Coddy.

Każde drzwi dodają pokój i żaden nigdy nie znika: długa rozgrywka zapełniłaby grę pokojami, których nikt już nie zobaczy. Zachowaj najnowszy pokój i Settings.KeepRooms znajdujących się za nim, a resztę usuń:

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

Lobby to pokój 0, więc ono również zostanie usunięte, gdy gracz zajdzie wystarczająco daleko. Pokoje, do których gracze mogą dotrzeć, pozostaną.

challenge icon

Wyzwanie

Średni

Na końcu funkcji addRoom, zanim zwróci wartość, zniszcz każdy pokój, którego numer jest mniejszy niż count - Settings.KeepRooms.

Naciśnij Play, a następnie Check.

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 -- liczba dotąd utworzonych pokoi

-- Zapada noc: brak słońca, wszędzie 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")

-- 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

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.Parent == lastRoom then
			addRoom()
		end
		openDoor(door)
	end)
end
setupDoor(workspace.Rooms.Lobby.Door)

-- Wejście do pokoju: staje się on Room gracza 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
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)
	return room
end

-- Każdy gracz: Room w rankingu 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)
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Gra Roblox: Ucieczka z mroku