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

تعود الأكوام

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

بمجرد تكسير كل الأكوام، تنفد العملات في اللعبة. ينبغي أن يعود الكوم المكسور إلى موضعه بعد Settings.RespawnTime ثانية.

يجب أن يتذكر الكوم موضعه. يحقق جدول مفهرس بالكوم ذلك:

local pileSpot = {} -- كل pile -> الموضع الذي تقف عليه
pileSpot[pile] = spot

تستدعي task.delay(seconds, fn, ...) دالةً لاحقًا مع وسيطاتها، من دون إيقاف أي شيء الآن:

task.delay(Settings.RespawnTime, spawnPile, spot)

أزِل الكوم من الجدول عند تكسيره، حتى لا يحتفظ الجدول بكل كومة وُجدت على الإطلاق.

challenge icon

التحدي

سهل
  1. بالقرب من الأعلى: local pileSpot = {}.
  2. في spawnPile، خزّن pileSpot[pile] = spot.
  3. في hitPile، عندما تتحطم الكومة: اقرأ موقعها، وأزلها من pileSpot، ودمّر الكومة، ثم نفّذ task.delay(Settings.RespawnTime, spawnPile, spot).

تعود الأكوام في هذا الدرس بعد ثانية واحدة. اضغط على Play، ثم Check.

جرّب بنفسك

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

local piles = workspace.Piles

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
	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")
	pile:Destroy()
end

-- كومة في كل موقع في Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
	spawnPile(spot)
end
quiz iconاختبر نفسك

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

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