Menu
CoddyTech

Acqua che sconfigge

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

È il momento del primo disastro. Nel gioco ce ne saranno diversi, quindi li raccogliamo in un'unica 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
end

Disasters.Flood(map)

L'alluvione inizia sotto l'isola, con una parte blu e larga. Non deve sostenere i giocatori, quindi CanCollide è false (Touched continua comunque ad attivarsi) e rimane Anchored. Ogni disastro sconfiggerà chiunque tocchi, quindi diamo un nome a questa operazione:

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

lava.Touched:Connect(defeat)

hit è la parte che ha toccato, per esempio un piede; il suo Parent è il personaggio. Assegna all'acqua come Parent la mappa, così quando la mappa viene distrutta alla fine del round, anche l'acqua verrà eliminata.

challenge icon

Sfida

Medio

Aggiungi il primo disastro: l’acqua che sconfigge i giocatori.

  1. Scrivi defeat(hit): se hit.Parent ha un Humanoid, imposta la sua Health su 0.
  2. Crea local Disasters = {} e Disasters.Flood(map): una parte Water nella mappa, ancorata, con CanCollide impostato su false, 10 stud più larga e più lunga di map.Base, 2 stud sotto di essa e con Touched collegato a defeat.
  3. Chiama Disasters.Flood(map) dopo il teletrasporto.

Premi «Gioca» e cammina fuori dall’isola: l’acqua sottostante ti sconfigge. Poi premi «Verifica».

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

-- Lezione 10: Water That Defeats va qui

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

Tutte le lezioni di Gioco Roblox: Sopravvivenza ai disastri

Esercitati da solo: Playground Roblox