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

كل منصة

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

تنتظر أربع منصات أخرى، ونسخ رمز الشراء أربع مرات يعني إصلاح كل خطأ أربع مرات. تتولى دالة واحدة التعامل مع كل منصة: تحدد سمة Item لكل منصة ما تشتريه، ويعثر items:FindFirstChild(name) على ذلك العنصر.

local function buy(pad, player)
	-- عمليات التحقق والسعر، كما سبق
	build(items:FindFirstChild(pad:GetAttribute("Item")))
end

تضع دالة ثانية، build(item)، عنصرًا في المصنع وتشغّله إذا كان قطّارة (تحمل وسم Dropper). تُبنى الجدران والتمثال والمُحسِّن بالطريقة نفسها؛ وحدها القطّارات تبدأ العمل.

challenge icon

التحدي

متوسط

استبدل كود اللوحة الواحدة:

  1. اكتب build(item): انقل العنصر إلى tycoon.Built، وابدأ تشغيله إذا كان يحمل الوسم Dropper.
  2. اكتب buy(pad, player): نفّذ عمليات التحقق نفسها واستخدم السعر نفسه كما من قبل، ثم انقل اللوحة إلى ServerStorage وأنشئ العنصر الذي يشير إليه اسم السمة Item الخاصة بها.
  3. اربط حدث Touched لكل لوحة في tycoon.Buttons لاستدعاء buy للاعب الذي يلمسها.

اضغط على Play واشترِ العناصر على طول الصف، ثم اضغط على Check.

جرّب بنفسك

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

local tycoon = workspace.Tycoon
local items = ServerStorage.TycoonItems
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)

-- يحوّل المجمّع الخام إلى 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 pad = tycoon.Buttons.Dropper2Pad
pad.Touched:Connect(function(hit)
	local player = Players:GetPlayerFromCharacter(hit.Parent)
	if not player or player ~= owner or pad.Parent ~= tycoon.Buttons then
		return
	end
	local cash = player.leaderstats.Cash
	local price = pad:GetAttribute("Price")
	if cash.Value >= price then
		cash.Value -= price
		pad.Parent = ServerStorage
		local dropper = items.Dropper2
		dropper.Parent = tycoon.Built
		startDropper(dropper)
	end
end)

-- تظهر بطاقة سعر فوق كل لوحة
for _, pad in tycoon.Buttons:GetChildren() do
	local tag = Instance.new("BillboardGui")
	tag.Name = "PriceTag"
	tag.Size = UDim2.fromOffset(160, 40)
	tag.StudsOffset = Vector3.new(0, 3, 0)
	tag.Parent = pad

	local label = Instance.new("TextLabel")
	label.Size = UDim2.fromScale(1, 1)
	label.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
	label.BackgroundTransparency = 0.2
	label.TextColor3 = Color3.fromRGB(255, 255, 255)
	label.TextScaled = true
	label.Text = pad:GetAttribute("Label") .. ": $" .. pad:GetAttribute("Price")
	label.Parent = tag
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)
quiz iconاختبر نفسك

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

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