Her Ped
Coddy'nin Roblox Oyunu: Fabrika Tycoon kursunda ders 9 / 18.
Dört ped daha bekliyor ve satın alma kodunu dört kez kopyalamak, her hatayı dört kez düzeltmek anlamına gelirdi. Tek bir işlev her pedi yönetir: her pedin Item özniteliği ne satın aldığını belirtir ve items:FindFirstChild(name) bu öğeyi bulur.
local function buy(pad, player)
-- kontroller ve fiyat, önceki gibi
build(items:FindFirstChild(pad:GetAttribute("Item")))
endİkinci bir işlev olan build(item), fabrikaya bir öğe yerleştirir ve öğe bir damlatıcıysa (Dropper etiketine sahipse) onu çalıştırır. Duvarlar, heykel ve yükseltici aynı şekilde oluşturulur; yalnızca damlatıcılar çalışır.
Görev
OrtaTek pedin kodunu değiştir:
build(item)yaz: öğeyitycoon.Builtiçine taşı veDropperetiketine sahipse çalıştır.buy(pad, player)yaz: öncekiyle aynı kontrolleri ve fiyatı kullan, ardından pedi ServerStorage'a taşı veItemniteliğinin adını belirttiği öğeyi oluştur.tycoon.Buttonsiçindeki her pedin Touched olayını, pedin üzerine basan oyuncu içinbuyişlevini çağıracak şekilde bağla.
Oyna'ya bas ve sıra boyunca ilerleyerek satın alımlarını yap, ardından Kontrol Et.
Kendin dene
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")
-- Her oyuncuya liderlik tablosunda Cash verilir
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: 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ı, cevheri 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)
-- İkinci bir dropper için satın alma pedi
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)
-- Her pedin üzerinde bir fiyat etiketi görünür
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
-- 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)
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.