Menu
CoddyTech

Fai schiudere un uovo

Lezione 9 di 18 del corso Gioco Roblox: Simulatore di animali domestici di Coddy.

L’uovo bianco vicino al punto di generazione ha un ProximityPrompt: avvicinati e Roblox mostra «Schiudi» con un tasto da tenere premuto (E, oppure un tocco sul telefono). Quando il giocatore lo tiene premuto abbastanza a lungo, il prompt attiva Triggered sul server, passando il giocatore:

workspace.Egg.ProximityPrompt.Triggered:Connect(function(player)
end)

Il server controlla il prezzo, prende le monete e dà un animale domestico. Un animale domestico è un StringValue che contiene il suo nome, in una cartella Pets all’interno del giocatore. Tutto ciò che il server inserisce nel giocatore viene replicato al client di quel giocatore: è così che l’elenco degli animali domestici, in una lezione successiva, sa cosa mostrare.

challenge icon

Sfida

Medio
  1. Quando un giocatore entra, assegnagli anche una Folder chiamata Pets.
  2. Scrivi givePet(player, name): una StringValue chiamata Pet, con Value uguale al nome, nella cartella Pets del giocatore; restituiscila.
  3. Collega workspace.Egg.ProximityPrompt.Triggered: se il giocatore ha meno monete di Settings.EggPrice, interrompi; altrimenti sottrai il prezzo, assegnagli un Cat e stampa Player1 hatched a Cat (il suo Name).

Premi Play, guadagna 25 monete e tieni premuto E sull'uovo. Poi premi Check.

Provalo tu

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

local remotes = game.ReplicatedStorage.Remotes
local piles = workspace.Piles
local pileSpot = {} -- ogni mucchio -> il punto in cui si trova
local lastHit = {} -- ogni giocatore -> quando ha colpito l'ultima volta

print("A Meadow pile gives " .. Settings.PileValue .. " coins")

-- Ogni giocatore riceve Coins nella classifica
Players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local coins = Instance.new("IntValue")
	coins.Name = "Coins"
	coins.Parent = leaderstats
end)

-- Un mucchio di monete in un punto: una copia di ServerStorage.CoinPile con la sua salute
-- e il suo valore come attributi
local function spawnPile(spot)
	local pile = ServerStorage.CoinPile:Clone()
	pile.Position = spot.Position
	pile:SetAttribute("MaxHealth", Settings.PileHealth)
	pile:SetAttribute("Health", Settings.PileHealth)
	pile:SetAttribute("Value", Settings.PileValue)
	pile.HealthGui.Label.Text = pile:GetAttribute("Health") .. "/" .. pile:GetAttribute("MaxHealth")
	pileSpot[pile] = spot
	pile.Parent = piles
	return pile
end

-- Un colpo riduce di 1 la salute di un mucchio;
-- quando arriva a 0, il mucchio si rompe e assegna il suo valore
local function hitPile(player, pile)
	local health = pile:GetAttribute("Health") - 1
	if health > 0 then
		pile:SetAttribute("Health", health)
		pile.HealthGui.Label.Text = health .. "/" .. pile:GetAttribute("MaxHealth")
		return
	end
	player.leaderstats.Coins.Value += pile:GetAttribute("Value")
	local spot = pileSpot[pile]
	pileSpot[pile] = nil
	pile:Destroy()
	-- un nuovo mucchio nello stesso punto, qualche secondo dopo
	task.delay(Settings.RespawnTime, spawnPile, spot)
end

-- Un mucchio in ogni punto di Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
	spawnPile(spot)
end

-- Il client chiede di colpire un mucchio. Non fidarti mai del client: chiunque può attivare
-- questo evento remoto con qualsiasi cosa, da qualsiasi luogo, alla velocità che vuole.
remotes.Hit.OnServerEvent:Connect(function(player, pile)
	-- un mucchio reale
	if typeof(pile) ~= "Instance" or pile.Parent ~= piles then
		return
	end
	-- a portata
	local character = player.Character
	local root = character and character:FindFirstChild("HumanoidRootPart")
	if not root or (root.Position - pile.Position).Magnitude > Settings.Reach then
		return
	end
	-- non troppo velocemente
	local now = time()
	if lastHit[player] and now - lastHit[player] < Settings.HitCooldown then
		return
	end
	lastHit[player] = now
	hitPile(player, pile)
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: Simulatore di animali domestici