Menu
CoddyTech

Bir Satın Alma Pedi

Coddy'nin Roblox Oyunu: Fabrika Tycoon kursunda ders 7 / 18.

Nakit harcamak içindir. Bandın önündeki mavi pedlerin her biri bir şey satın alır; ilki ikinci bir damlalık satın alır. Bir ped fiyatını, dünya oluşturulurken ayarlanan Price özniteliğinden öğrenir.

Satın aldığı öğe, doğru yerde olacak şekilde ServerStorage.TycoonItems içinde bekler. Satın alma işlemi öğeyi fabrikanın Built klasörüne taşır; böylece öğe dünyaya eklenir. Ardından ped, kimsenin üzerine basamayacağı ServerStorage'a taşınır. Yok edilmez, taşınır: sonraki bir derste pedler geri getirilir.

if cash.Value >= price then
	cash.Value -= price
	pad.Parent = ServerStorage
	items.Dropper2.Parent = tycoon.Built
end

Pede dokunan her uzuv, aynı anda birkaç kez Touched olayını tetikler. İlk dokunuşla satın alma yapıldıktan sonra ped artık tycoon.Buttons içinde olmadığından, önce bunu kontrol etmek çift satın almayı önler.

challenge icon

Görev

Orta

İlk pedi çalışır hâle getir:

  1. ServerStorage’ı al ve local items = ServerStorage.TycoonItems satırını üst kısma yakın bir yerde tut.
  2. Bir oyuncu tycoon.Buttons.Dropper2Pad’e dokunduğunda: oyuncu sahip değilse veya ped hâlâ tycoon.Buttons içindeyse hiçbir şey yapma. Oyuncunun Cash değeri, pedin Price özniteliğine eşit veya daha yüksekse, fiyatı düş, pedi ServerStorage’a taşı, items.Dropper2’ı tycoon.Built içine taşı ve çalıştır.

Play’e bas, 30 Cash kazanıp pedi satın al, ardından Check’e bas.

Kendin dene

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")

-- Her oyuncu liderlik tablosunda Cash alır
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)

-- Fabrikanın üzerindeki tabela
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: bir dropper'ın altına bırakılan, Cash değerinde küçük bir parça
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

-- Bir dropper, kaç kez başlatılırsa başlatılsın yalnızca tek bir döngü çalıştırır
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

-- Konveyör, üzerinde duran her şeyi taşır
tycoon.Conveyor.AssemblyLinearVelocity = Vector3.new(Settings.BeltSpeed, 0, 0)

-- Toplayıcı, ore'u Cash'e dönüştürür
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)

-- Sahiplenme: pede ilk basan oyuncu fabrikanın sahibi olur
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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Roblox Oyunu: Fabrika Tycoon bölümündeki tüm dersler