Menu
CoddyTech

Tetaskan Telur

Pelajaran 9 dari 18 dalam kursus Game Roblox: Simulator Hewan Peliharaan di Coddy.

Telur putih di dekat titik spawn memiliki ProximityPrompt: dekati telur itu, lalu Roblox akan menampilkan "Hatch" dengan tombol yang harus ditahan (E, atau ketukan di ponsel). Saat pemain menahannya cukup lama, prompt memicu Triggered di server, dengan pemain sebagai argumen:

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

Server memeriksa harganya, mengambil koin, lalu memberikan hewan peliharaan. Hewan peliharaan berupa StringValue yang menyimpan namanya, di dalam folder Pets milik pemain. Semua yang server tempatkan di dalam pemain akan direplikasi ke client pemain tersebut, sehingga daftar hewan peliharaan di pelajaran berikutnya tahu apa yang harus ditampilkan.

challenge icon

Tantangan

Sedang
  1. Saat pemain bergabung, berikan juga Folder bernama Pets kepada mereka.
  2. Tulis givePet(player, name): buat StringValue bernama Pet dengan Value berupa nama, di dalam Pets milik pemain, lalu kembalikan nilainya.
  3. Hubungkan workspace.Egg.ProximityPrompt.Triggered: jika pemain memiliki koin kurang dari Settings.EggPrice, hentikan proses; jika tidak, kurangi koin sejumlah harga, berikan Cat kepada mereka, lalu cetak Player1 hatched a Cat (Name mereka).

Tekan Play, kumpulkan 25 koin, lalu tahan E di dekat telur. Setelah itu, tekan Periksa.

Coba sendiri

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 = {} -- setiap tumpukan -> tempatnya berdiri
local lastHit = {} -- setiap pemain -> waktu pukulan terakhirnya

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

-- Setiap pemain mendapat Coins di leaderboard
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)

-- Tumpukan koin di suatu tempat: salinan ServerStorage.CoinPile dengan kesehatan
-- dan nilainya sebagai atribut
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

-- Satu pukulan mengurangi kesehatan tumpukan sebesar 1;
-- saat mencapai 0, tumpukan hancur dan memberikan nilainya
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()
	-- tumpukan baru di tempat yang sama beberapa detik kemudian
	task.delay(Settings.RespawnTime, spawnPile, spot)
end

-- Satu tumpukan di setiap tempat di Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
	spawnPile(spot)
end

-- client meminta untuk memukul tumpukan. Jangan pernah percaya client: siapa pun bisa mengirim
-- remote ini dengan apa saja, dari mana saja, secepat yang mereka mau.
remotes.Hit.OnServerEvent:Connect(function(player, pile)
	-- tumpukan yang asli
	if typeof(pile) ~= "Instance" or pile.Parent ~= piles then
		return
	end
	-- dalam jangkauan
	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
	-- tidak terlalu cepat
	local now = time()
	if lastHit[player] and now - lastHit[player] < Settings.HitCooldown then
		return
	end
	lastHit[player] = now
	hitPile(player, pile)
end)
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Game Roblox: Simulator Hewan Peliharaan

Latihan sendiri: Playground Roblox