צייד עד שלוש
שיעור 15 מתוך 20 בקורס משחק Roblox: סימולטור חיות מחמד של Coddy.
לחיצה על כפתור של חיית מחמד אמורה להוציא אותה או להחזיר אותה. TextButton מפעיל את Activated בלחיצה או בהקשה, בצד הלקוח. הלקוח מבקש מהשרת דרך remotes.Equip לצייד את חיית המחמד עצמה.
השרת בודק, כרגיל: חיית המחמד חייבת להיות מופע בתוך Pets של השחקן הזה (משתמש זדוני עלול לשלוח כל דבר), ולא יכולות להיות בחוץ יותר מ-Settings.MaxEquipped חיות מחמד. לאחר מכן הוא הופך את הערך של Equipped, והשינוי משוכפל בחזרה: הרשימה מצוירת מחדש וחיית המחמד מופיעה או נעלמת.
אתגר
בינוניהוציאו חיית מחמד או החזירו אותה באמצעות הכפתור שלה.
- ב־
PetClient, האירועActivatedשל כל כפתור מפעיל אתremotes.Equipעם חיית המחמד שלו. - ב־
PetServer, באירועremotes.Equip.OnServerEvent: עצרו אם ה־Parent של חיית המחמד אינוplayer.Pets; שנו אתEquipped, והוציאו חיית מחמד רק כשפחות מ־Settings.MaxEquippedחיות כבר בחוץ. - ב־Heartbeat, השמידו את החלק של חיית מחמד שהוחזרה.
לחצו על "שחק" ולחצו על Cat (בחוץ): Cat חוזרת. לאחר מכן לחצו על "בדיקה".
נסו בעצמכם
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local RunService = game:GetService("RunService")
local Settings = require(game.ReplicatedStorage.Settings)
local remotes = game.ReplicatedStorage.Remotes
local piles = workspace.Piles
local petParts = workspace.PetParts
local pileSpot = {} -- כל ערימה -> המקום שבו היא נמצאת
local lastHit = {} -- כל שחקן -> מתי הוא היכה בפעם האחרונה
print("A Meadow pile gives " .. Settings.PileValue .. " coins")
-- Settings.Pets לפי שם
local petInfo = {}
for _, info in Settings.Pets do
petInfo[info.Name] = info
end
-- חיית מחמד: StringValue בתיקיית Pets של השחקן, שמכיל את שמה, עם
-- רמת הנדירות והכוח שלה כתכונות
local function givePet(player, name, equipped)
local info = petInfo[name]
local pet = Instance.new("StringValue")
pet.Name = "Pet"
pet.Value = name
pet:SetAttribute("Rarity", info.Rarity)
pet:SetAttribute("Power", info.Power)
pet:SetAttribute("Equipped", equipped)
pet.Parent = player.Pets
return pet
end
-- כמה חיות מחמד של השחקן פעילות
local function equippedCount(player)
local count = 0
for _, pet in player.Pets:GetChildren() do
if pet:GetAttribute("Equipped") then
count += 1
end
end
return count
end
-- כמה כוח חיות המחמד של השחקן מוסיפות לכל מכה
local function petPower(player)
local power = 0
for _, pet in player.Pets:GetChildren() do
if pet:GetAttribute("Equipped") then
power += pet:GetAttribute("Power")
end
end
return power
end
-- כל שחקן מקבל 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
-- חיות המחמד שבבעלותם
local pets = Instance.new("Folder")
pets.Name = "Pets"
pets.Parent = player
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 + petPower(player))
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
-- הלקוח מבקש להכות בערימה. לעולם אל תסמכו על הלקוח: כל אחד יכול להפעיל
-- את ה-remote הזה עם כל דבר, מכל מקום, ובמהירות שירצה.
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)
-- הגרלה משוקללת: ה-Chance של כל חיית מחמד (מתוך 100) הוא חלקה בטווח
local function rollPet()
local roll = math.random() * 100
for _, info in Settings.Pets do
roll -= info.Chance
if roll <= 0 then
return info.Name
end
end
return Settings.Pets[1].Name
end
-- בקיעה: ההנחיה של הביצה, בתשלום במטבעות
workspace.Egg.ProximityPrompt.Triggered:Connect(function(player)
local coins = player.leaderstats.Coins
if coins.Value < Settings.EggPrice then
return
end
coins.Value -= Settings.EggPrice
local name = rollPet()
-- מצטרפת מיד, אם יש מקום
local pet = givePet(player, name, equippedCount(player) < Settings.MaxEquipped)
print(player.Name .. " hatched a " .. name)
end)
-- חיות המחמד הפעילות עוקבות אחרי הבעלים שלהן: לכל אחת יש חלק בעולם, שנשמר
-- בשורה מאחורי השחקן בכל פריים
local petModels = {} -- כל חיית מחמד -> החלק שלה בעולם
RunService.Heartbeat:Connect(function()
for _, player in Players:GetPlayers() do
local root = player.Character and player.Character:FindFirstChild("HumanoidRootPart")
local pets = player:FindFirstChild("Pets")
local slot = 0
for _, pet in pets and pets:GetChildren() or {} do
local model = petModels[pet]
if pet:GetAttribute("Equipped") and root then
slot += 1
if not model then
model = ServerStorage.PetModels[pet.Value]:Clone()
model.Parent = petParts
petModels[pet] = model
end
model.CFrame = root.CFrame * CFrame.new((slot - 2) * 3, -1.5, 4)
end
end
end
end)
-- שיעור 15: ציידו עד שלוש חיות מחמד נכנס כאן
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה משחק Roblox: סימולטור חיות מחמד
3ביצים וחיות מחמד
בקיעת ביצהתרגלו בעצמכם: Roblox אונליין