Menu
CoddyTech

Alt Eden Su

Coddy'nin Roblox Oyunu: Felaketten Sağ Kalma kursunda ders 10 / 20.

İlk felaketin zamanı. Oyunda birkaç felaket olacak, bu yüzden hepsi tek bir tabloda yer alacak ve her biri haritayı alan bir işlev olacak. Bir tabloda saklanan işlev, diğer işlevler gibi çağrılır:

local Disasters = {}

function Disasters.Flood(map)
	-- suyu oluştur
end

Disasters.Flood(map)

Sel, adanın altında geniş mavi bir parça olarak başlar. Oyuncuları havada tutmamalı, bu nedenle CanCollide false olur (Touched yine de tetiklenir) ve Anchored olarak kalır. Her felaket dokunduğu kişiyi oyundan çıkaracağından, bu işleme bir ad verelim:

local function defeat(hit)
	local humanoid = hit.Parent:FindFirstChild("Humanoid")
	if humanoid then
		humanoid.Health = 0
	end
end

lava.Touched:Connect(defeat)

hit, dokunan parçadır; örneğin bir ayak. Parent karakterdir. Suyu haritanın içine yerleştir ki turun sonunda harita yok edildiğinde su da onunla birlikte yok olsun.

challenge icon

Görev

Orta

İlk felaketi ekle: oyuncuyu yenen su.

  1. defeat(hit) yaz: hit.Parent bir Humanoid içeriyorsa Health değerini 0 yap.
  2. local Disasters = {} ve Disasters.Flood(map) oluştur: haritada Water adında bir parça olsun; sabitlenmiş, CanCollide false, map.Base'ten 10 stud daha geniş ve uzun, ondan 2 stud aşağıda olsun ve Touched, defeat'e bağlansın.
  3. Işınlanmadan sonra Disasters.Flood(map) çağır.

“Oyna” düğmesine bas ve adadan aşağı yürü: altındaki su seni yener. Ardından “Kontrol et” düğmesine bas.

Kendin dene

local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)

local lobbySpawn = workspace.LobbySpawn

print("Rounds last " .. Settings.RoundLength .. " seconds")

-- Her oyuncunun liderlik tablosunda Wins değeri olur
Players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local wins = Instance.new("IntValue")
	wins.Name = "Wins"
	wins.Parent = leaderstats
end)

-- Bekleme alanındaki durum panosu
local gui = Instance.new("SurfaceGui")
gui.Parent = workspace.StatusBoard

local status = Instance.new("TextLabel")
status.Name = "Status"
status.Size = UDim2.fromScale(1, 1)
status.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
status.TextColor3 = Color3.fromRGB(255, 255, 255)
status.TextScaled = true
status.Text = "Welcome to Disaster Survival!"
status.Parent = gui

local function setStatus(text)
	status.Text = text
end

local function teleport(player, target)
	local character = player.Character
	if character then
		character:PivotTo(target.CFrame + Vector3.new(0, 4, 0))
	end
end

-- Ders 10: Yenilgiye Uğratan Su buraya gelecek

-- Tur döngüsü
while true do
	for seconds = Settings.Intermission, 1, -1 do
		setStatus("Intermission: " .. seconds)
		task.wait(1)
	end

	local map = ServerStorage.Maps.Island:Clone()
	map.Name = "Map"
	map.Parent = workspace

	local survivors = {}
	for _, player in Players:GetPlayers() do
		local character = player.Character
		if character and character.Humanoid.Health > 0 then
			teleport(player, map.Spawn)
			survivors[player] = true
			character.Humanoid.Died:Connect(function()
				survivors[player] = nil
			end)
		end
	end

	for seconds = Settings.RoundLength, 1, -1 do
		setStatus("Time left: " .. seconds)
		task.wait(1)
	end

	local names = {}
	for player in survivors do
		player.leaderstats.Wins.Value += 1
		teleport(player, lobbySpawn)
		table.insert(names, player.Name)
	end
	map:Destroy()
	if #names > 0 then
		setStatus("Winners: " .. table.concat(names, ", "))
	else
		setStatus("Nobody survived!")
	end
	task.wait(3)
end

Roblox Oyunu: Felaketten Sağ Kalma bölümündeki tüm dersler

Kendi başına pratik yap: Roblox playground