Fabrikayı Ele Geçir
Coddy'nin Roblox Oyunu: Fabrika Tycoon kursunda ders 6 / 18.
Bir tycoon birine aittir. Girişin yanındaki yeşil ped bunu sahiplenir: üzerine ilk basan oyuncu sahip olur, fabrika çalışmaya başlar ve yalnızca sahibi ödeme alır. Sahip, betiğin başında tanımlanan tek bir değişkendir; biri sahiplenene kadar nil değerindedir:
local owner = nil
claimPad.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player and not owner then
owner = player
end
end)Fabrika sahiplenildiğinde, içindeki her damlatıcı çalışmaya başlar. Damlatıcılarda etiket olarak Dropper bulunur; böylece CollectionService:GetTagged("Dropper"), nerede olurlarsa olsunlar hepsini bulur. Satın alınan damlatıcılar ServerStorage içinde bekleyeceğinden, yalnızca çalışma alanındakiler çalışmaya başlar.
Sahibi ayrıldıktan sonra fabrika daha sonra yeniden sahiplenilebilir. Hiçbir damlatıcının iki döngüyü aynı anda çalıştırmaması için startDropper, çalışan bir damlatıcıyı bir öznitelikle işaretler ve bu öznitelik ayarlanmışsa hiçbir şey yapmaz.
Fabrikanın üzerindeki bir tabela kime ait olduğunu belirtir: diğer tüm tabelalarda olduğu gibi, tycoon.Sign üzerinde bir SurfaceGui bulunur.
Görev
OrtaFabrikanın sahiplenilebilir olmasını sağla:
CollectionService'i al ve üst kısımlara yakın bir yerelocal owner = nilekle.tycoon.Signüzerine bir tabela yerleştir: içinde tamamen yer kaplayan,Statusadında bir TextLabel bulunan bir SurfaceGui; koyu arka plan üzerinde beyaz, ölçeklendirilmiş yazı veStep on the green pad to claim this factorymetni; ayrıca birsetSign(text)işlevi.startDropperiçinde, damlalığınRunningniteliği ayarlanmışsa hemen geri dön; aksi takdirde niteliği ayarla ve döngü sona erdiğinde temizle.tycoon.Dropper'ı başlatan satırı kaldır. Bir oyuncutycoon.ClaimPadüzerine bastığında ve sahibi yoksa: onu sahip yap, pedi griye çevir (Color3.fromRGB(120, 120, 120), SmoothPlastic), tabelayıPlayer1's Factoryolarak ayarla (oyuncunun Name değeriyle) ve çalışma alanında etiketlenmiş her damlalığı başlat.- Toplayıcıda yalnızca sahibine ödeme yap (sahibi varsa).
Play'e bas ve fabrikanı sahiplen, ardından Check'e bas.
Kendin dene
local Players = game:GetService("Players")
local Debris = game:GetService("Debris")
local Settings = require(game.ReplicatedStorage.Settings)
local tycoon = workspace.Tycoon
print("Ore is worth " .. Settings.OreValue .. " Cash")
-- Her oyuncu, liderlik tablosunda Cash kazanı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)
-- 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
local function startDropper(dropper)
task.spawn(function()
while dropper:IsDescendantOf(workspace) do
dropOre(dropper)
task.wait(Settings.DropInterval)
end
end)
end
startDropper(tycoon.Dropper)
-- Konveyör, üzerindeki 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()
for _, player in Players:GetPlayers() do
player.leaderstats.Cash.Value += value
end
end
end)
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.