منصة شراء
الدرس 7 من 18 في دورة لعبة Roblox: تايكون المصنع على Coddy.
النقود مُخصّصة للإنفاق. تشتري كلٌّ من الوسادات الزرقاء أمام السير الناقل شيئًا ما؛ وتشتري الأولى قطّارة ثانية. تعرف الوسادة سعرها من سمة، Price، عُيّنت عند بناء العالم.
ينتظر العنصر الذي تشتريه في ServerStorage.TycoonItems، في المكان الصحيح بالفعل. ينقله الشراء إلى مجلد Built الخاص بالمصنع، فيصبح جزءًا من العالم، وينقل الوسادة إلى ServerStorage، حيث لا يستطيع أحد أن يطأها. نُقلت ولم تُدمَّر: يعيد درس لاحق الوسادات.
if cash.Value >= price then
cash.Value -= price
pad.Parent = ServerStorage
items.Dropper2.Parent = tycoon.Built
endكل طرف يلمس الوسادة يُطلق الحدث Touched عدة مرات في اللحظة نفسها. بعد أن يشتري أحدهم أول مرة، لن تعود الوسادة ضمن tycoon.Buttons، لذا فإن التحقق من ذلك أولًا يمنع الشراء المزدوج.
التحدي
متوسطاجعل الوسادة الأولى تعمل:
- احصل على
ServerStorage، وأبقِlocal items = ServerStorage.TycoonItemsبالقرب من الأعلى. - عندما يلمس لاعب
tycoon.Buttons.Dropper2Pad: لا تفعل شيئًا إلا إذا كان المالك وكانت الوسادة لا تزال فيtycoon.Buttons. إذا كان رصيده من Cash يساوي سمةPriceللوسادة أو يتجاوزها، فاقتطع السعر، وانقل الوسادة إلى ServerStorage، وانقلitems.Dropper2إلىtycoon.Built، ثم شغّله.
اضغط على العب، واكسب 30 Cash واشترِها، ثم اضغط على تحقّق.
جرّب بنفسك
local Players = game:GetService("Players")
local CollectionService = game:GetService("CollectionService")
local Debris = game:GetService("Debris")
local Settings = require(game.ReplicatedStorage.Settings)
local tycoon = workspace.Tycoon
local owner = nil
print("Ore is worth " .. Settings.OreValue .. " Cash")
-- يحصل كل لاعب على Cash في لوحة المتصدرين
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local cash = Instance.new("IntValue")
cash.Name = "Cash"
cash.Parent = leaderstats
end)
-- اللافتة فوق المصنع
local gui = Instance.new("SurfaceGui")
gui.Parent = tycoon.Sign
local signLabel = Instance.new("TextLabel")
signLabel.Name = "Status"
signLabel.Size = UDim2.fromScale(1, 1)
signLabel.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
signLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
signLabel.TextScaled = true
signLabel.Text = "Step on the green pad to claim this factory"
signLabel.Parent = gui
local function setSign(text)
signLabel.Text = text
end
-- Ore: قطعة صغيرة تساوي Cash، تسقط أسفل جهاز الإسقاط
local function dropOre(dropper)
local ore = Instance.new("Part")
ore.Name = "Ore"
ore.Size = Vector3.new(1, 1, 1)
ore.Color = Color3.fromRGB(150, 150, 160)
ore.Position = dropper.Position - Vector3.new(0, 2.5, 0)
ore:SetAttribute("Value", Settings.OreValue)
if math.random() < Settings.GoldChance then
ore.Color = Color3.fromRGB(255, 200, 40)
ore.Material = Enum.Material.Neon
ore:SetAttribute("Value", Settings.OreValue * 5)
end
ore.Parent = workspace
Debris:AddItem(ore, 20)
end
-- ينفّذ جهاز الإسقاط حلقة واحدة مهما تكرّر تشغيله
local function startDropper(dropper)
if dropper:GetAttribute("Running") then
return
end
dropper:SetAttribute("Running", true)
task.spawn(function()
while dropper:IsDescendantOf(workspace) do
dropOre(dropper)
task.wait(Settings.DropInterval)
end
dropper:SetAttribute("Running", nil)
end)
end
-- يحمل السير الناقل كل ما يستقر عليه
tycoon.Conveyor.AssemblyLinearVelocity = Vector3.new(Settings.BeltSpeed, 0, 0)
-- يحوّل المجمّع Ore إلى Cash
tycoon.Collector.Touched:Connect(function(hit)
if hit.Name == "Ore" then
local value = hit:GetAttribute("Value")
hit:Destroy()
if owner then
owner.leaderstats.Cash.Value += value
end
end
end)
-- الاستحواذ: أول لاعب يطأ اللوحة يمتلك المصنع
local claimPad = tycoon.ClaimPad
claimPad.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player and not owner then
owner = player
claimPad.Color = Color3.fromRGB(120, 120, 120)
claimPad.Material = Enum.Material.SmoothPlastic
setSign(player.Name .. "'s Factory")
for _, dropper in CollectionService:GetTagged("Dropper") do
if dropper:IsDescendantOf(workspace) then
startDropper(dropper)
end
end
end
end)
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.