בקעו ביצה
שיעור 9 מתוך 18 בקורס משחק Roblox: סימולטור חיות מחמד של Coddy.
לביצה הלבנה ליד נקודת ההופעה יש ProximityPrompt: התקרב אליה ו-Roblox יציג "Hatch" עם מקש שצריך להחזיק (E, או הקשה בטלפון). כשהשחקן מחזיק אותו מספיק זמן, ההנחיה מפעילה את Triggered בשרת, עם השחקן:
workspace.Egg.ProximityPrompt.Triggered:Connect(function(player)
end)השרת בודק את המחיר, לוקח את המטבעות ונותן חיית מחמד. חיית מחמד היא StringValue שמכיל את שמה, בתוך תיקיית Pets שבשחקן. כל מה שהשרת מכניס לשחקן משוכפל ללקוח של אותו שחקן, וכך רשימת חיות המחמד בשיעור מאוחר יותר יודעת מה להציג.
אתגר
בינוני- כששחקן מצטרף, תן לו גם Folder בשם
Pets. - כתוב את
givePet(player, name): צור StringValue בשםPet, הגדר את Value לשם, ושמור אותו בתיקיית Pets של השחקן; החזר אותו. - חבר את
workspace.Egg.ProximityPrompt.Triggered: אם יש לשחקן פחות מטבעות מאשרSettings.EggPrice, עצור; אחרת גבֶה את המחיר, תן לוCat, והדפסPlayer1 hatched a Cat(ה-Name שלו).
לחץ על הפעלה, הרוויח 25 מטבעות והחזק את E ליד הביצה. לאחר מכן לחץ על בדיקה.
נסו בעצמכם
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 = {} -- כל ערימה -> המקום שבו היא נמצאת
local lastHit = {} -- כל שחקן -> מתי היכה בפעם האחרונה
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)
-- ערימת מטבעות במקום מסוים: עותק של 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)
pile.HealthGui.Label.Text = pile:GetAttribute("Health") .. "/" .. pile:GetAttribute("MaxHealth")
pileSpot[pile] = spot
pile.Parent = piles
return pile
end
-- מכה מפחיתה 1 מכמות החיים של ערימה;
-- כשהכמות מגיעה ל־0, הערימה נשברת ומעניקה את הערך שלה
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()
-- ערימה חדשה באותו מקום, כעבור כמה שניות
task.delay(Settings.RespawnTime, spawnPile, spot)
end
-- ערימה בכל מקום באזור Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
spawnPile(spot)
end
-- הלקוח מבקש להכות בערימה. לעולם אין לסמוך על הלקוח: כל אחד יכול להפעיל
-- את האירוע המרוחק הזה עם כל דבר, מכל מקום, ובתדירות גבוהה ככל שירצה.
remotes.Hit.OnServerEvent:Connect(function(player, pile)
-- ערימה אמיתית
if typeof(pile) ~= "Instance" or pile.Parent ~= piles then
return
end
-- בטווח פגיעה
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
-- לא מהר מדי
local now = time()
if lastHit[player] and now - lastHit[player] < Settings.HitCooldown then
return
end
lastHit[player] = now
hitPile(player, pile)
end)
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה משחק Roblox: סימולטור חיות מחמד
3ביצים וחיות מחמד
בקעו ביצה