Menu
CoddyTech

Inondazione crescente

Lezione 10 di 18 del corso Gioco Roblox: Sopravvivenza ai disastri di Coddy.

È il momento del primo disastro. Ce ne saranno diversi nel gioco, quindi li mettiamo tutti in una tabella, ciascuno come funzione che riceve la mappa. Una funzione memorizzata in una tabella si richiama come qualsiasi altra:

local Disasters = {}

function Disasters.Flood(map)
	-- crea l'acqua e alzala
end

Disasters.Flood(map)

L’alluvione è una parte blu e ampia che inizia sotto l’isola e si solleva, ma non fino in cima: le rocce sull’Island e i tetti sui Rooftops restano asciutti, così un giocatore che si arrampica in tempo sopravvive. Un disastro a cui nessuno può sopravvivere non è un gioco. TweenService cambia una proprietà gradualmente nel tempo: descrivi la durata con un TweenInfo, indica i valori obiettivo e usa Play.

local rise = TweenInfo.new(12, Enum.EasingStyle.Linear)
TweenService:Create(water, rise, { Position = water.Position + Vector3.new(0, 8, 0) }):Play()

L’acqua non deve sostenere i giocatori, quindi CanCollide è false e resta Anchored. Sconfiggere chiunque la tocchi è lo stesso compito svolto dalla lava nel primo corso; in questo gioco la funzione ha un nome, defeat(hit), perché verrà usata da ogni disastro.

Imposta la mappa come genitore dell’acqua, così quando la mappa viene distrutta alla fine del round, l’acqua verrà rimossa insieme a essa.

challenge icon

Sfida

Medio

Aggiungi l’alluvione:

  1. Recupera TweenService all’inizio.
  2. Scrivi defeat(hit): se hit.Parent ha un Humanoid, imposta la sua Health su 0.
  3. Crea local Disasters = {} e function Disasters.Flood(map): una parte chiamata Water nella mappa, ancorata, con CanCollide disattivato, blu e trasparente (Transparency 0.3), più larga di 10 stud rispetto a map.Base in ogni direzione, con il punto di partenza 2 stud più in basso. Toccarla sconfigge il giocatore. Anima la sua Position di 8 stud verso l’alto nell’arco di Settings.RoundLength * 0.8 secondi, a velocità costante (Enum.EasingStyle.Linear), così si ferma sotto la cima delle rocce.
  4. Chiama Disasters.Flood(map) subito dopo aver teletrasportato i giocatori.

Premi Play e gareggia contro la marea: salta sulle rocce a sinistra dello spawn. Poi premi Check.

Provalo tu

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

-- Ogni giocatore ottiene Wins nella classifica
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)

-- Il tabellone di stato nella lobby
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

-- Il ciclo dei round
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
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Gioco Roblox: Sopravvivenza ai disastri