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.
Sfida
MedioAggiungi il primo disastro: l’acqua che sconfigge i giocatori.
- Scrivi
defeat(hit): sehit.Parentha un Humanoid, imposta la sua Health su 0. - Crea
local Disasters = {}eDisasters.Flood(map): una parteWaternella mappa, ancorata, con CanCollide impostato su false, 10 stud più larga e più lunga dimap.Base, 2 stud sotto di essa e con Touched collegato adefeat. - 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
4Trasformalo in un gioco
Due mappe3Disastri
Acqua che sconfiggeEsercitati da solo: Playground Roblox