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
endPede 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.
Görev
Ortaİlk pedi çalışır hâle getir:
ServerStorage’ı al velocal items = ServerStorage.TycoonItemssatırını üst kısma yakın bir yerde tut.- Bir oyuncu
tycoon.Buttons.Dropper2Pad’e dokunduğunda: oyuncu sahip değilse veya ped hâlâtycoon.Buttonsiçindeyse hiçbir şey yapma. Oyuncunun Cash değeri, pedinPriceözniteliğine eşit veya daha yüksekse, fiyatı düş, pedi ServerStorage’a taşı,items.Dropper2’ıtycoon.Builtiç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)
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.