Menu
CoddyTech

מטבעות על המסך

שיעור 5 מתוך 18 בקורס משחק Roblox: סימולטור חיות מחמד של Coddy.

עכשיו נעבור לצד הלקוח. PetClient הוא LocalScript בתוך ה-HUD, שהוא ScreenGui ש-Roblox מעתיק מ-StarterGui אל המסך של כל שחקן כשהוא מופיע במשחק. LocalScript פועל במכשיר של אותו שחקן, והוא יכול לזהות את השחקן שעבורו הוא פועל:

local me = game:GetService("Players").LocalPlayer

השרת מוסיף את leaderstats לשחקן זמן קצר לאחר שהוא מצטרף, ולכן הלקוח ממתין לו באמצעות WaitForChild. לאחר מכן הוא מציג את המטבעות בתווית Coins של ה-HUD, ומעדכן אותה שוב בכל פעם שהערך משתנה: האירוע Changed של IntValue מופעל עם הערך החדש.

התווית מציגה רק את מה שהשרת החליט. שינוי של Coins.Value בתוך LocalScript ישנה את התצוגה של השחקן הזה בלבד, ולא ישנה דבר בשרת.

challenge icon

אתגר

בינוני

ב-PetClient:

  1. קבל את Players, את local me = Players.LocalPlayer ואת local hud = script.Parent.
  2. המתן ל-leaderstats ול-Coins שבתוכו.
  3. כתוב את showCoins(), שמגדירה את hud.Coins.Text ל-Coins: 5 (הערך), קרא לה פעם אחת וחבר אותה ל-Coins.Changed.

לחץ על Play ושבור ערמה. לאחר מכן לחץ על Check.

נסו בעצמכם

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

local piles = workspace.Piles
local pileSpot = {} -- כל ערימה -> המקום שעליו היא עומדת

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

-- כל שחקן מקבל Coins בלוח המובילים
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)

-- לחיצה על ערימה דורשת את hitPile, שמוגדרת בהמשך, אחרי spawnPile: יש להגדיר את שמה
-- כאן, לפני שתיהן
local hitPile

-- ערימת מטבעות במקום מסוים: עותק של ServerStorage.CoinPile עם הבריאות שלה
-- והערך שלה כמאפיינים
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)
	-- לחצו עליה כדי לפגוע בה
	local detector = Instance.new("ClickDetector")
	detector.Parent = pile
	pileSpot[pile] = spot
	pile.Parent = piles
	detector.MouseClick:Connect(function(player)
		hitPile(player, pile)
	end)
	return pile
end

-- פגיעה מפחיתה 1 מהבריאות של הערימה;
-- כשהבריאות מגיעה ל־0, הערימה מתפרקת ומעניקה את הערך שלה
function hitPile(player, pile)
	local health = pile:GetAttribute("Health") - 1
	if health > 0 then
		pile:SetAttribute("Health", health)
		return
	end
	player.leaderstats.Coins.Value += pile:GetAttribute("Value")
	local spot = pileSpot[pile]
	pileSpot[pile] = nil
	pile:Destroy()
	-- ערימה חדשה באותו מקום, כמה שניות לאחר מכן
	task.delay(Settings.RespawnTime, spawnPile, spot)
end

-- ערימה בכל מקום באזור Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
	spawnPile(spot)
end
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה משחק Roblox: סימולטור חיות מחמד