Menu
CoddyTech
flag Ar iconالعربيةdown icon

فقّس بيضة

الدرس 9 من 18 في دورة لعبة Roblox: محاكي الحيوانات الأليفة على Coddy.

لدى البيضة البيضاء قرب نقطة الظهور ProximityPrompt: اقترب منها، وسيعرض Roblox كلمة "Hatch" مع مفتاح يجب الضغط عليه باستمرار (E، أو لمسة على الهاتف). عندما يضغط اللاعب عليه باستمرار لمدة كافية، يُطلِق الموجّه Triggered على الخادم، مع اللاعب:

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

يتحقق الخادم من السعر، ويأخذ العملات ويمنح حيوانًا أليفًا. الحيوان الأليف هو StringValue يحمل اسمه، داخل مجلد Pets لدى اللاعب. كل ما يضعه الخادم داخل اللاعب يتزامن مع عميل ذلك اللاعب، وهذا ما يجعل قائمة الحيوانات الأليفة في درس لاحق تعرف ما الذي يجب عرضه.

challenge icon

التحدي

متوسط
  1. عندما ينضم لاعب، أنشئ له أيضًا Folder باسم Pets.
  2. اكتب givePet(player, name): أنشئ StringValue باسم Pet، واجعل Value يساوي الاسم، وضعه في Pets الخاصة باللاعب؛ ثم أعده.
  3. اربط 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)
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس لعبة Roblox: محاكي الحيوانات الأليفة