Beanspruche die Fabrik
Lektion 6 von 18 im Kurs Roblox-Spiel: Fabrik-Tycoon von Coddy.
Ein Tycoon gehört jemandem. Das grüne Feld am Eingang beansprucht ihn: Der erste Spieler, der darauf tritt, wird zum Besitzer, die Fabrik startet und nur der Besitzer wird bezahlt. Der Besitzer ist eine Variable am Anfang des Skripts, die nil ist, bis jemand den Tycoon beansprucht:
local owner = nil
claimPad.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player and not owner then
owner = player
end
end)Wenn die Fabrik beansprucht wird, startet jeder Dropper darin. Die Dropper tragen ein Tag, Dropper, sodass CollectionService:GetTagged("Dropper") sie alle findet, egal, wo sie sich befinden. Gekaufte Dropper warten in ServerStorage, daher starten nur diejenigen, die sich im Workspace befinden.
Später kann die Fabrik erneut beansprucht werden, nachdem ihr Besitzer gegangen ist. Damit kein Dropper jemals zwei Schleifen ausführt, markiert startDropper einen laufenden Dropper mit einem Attribut und tut nichts, wenn dieses gesetzt ist.
Ein Schild über der Fabrik zeigt, wem sie gehört: ein SurfaceGui auf tycoon.Sign, wie auf jedem Schild.
Aufgabe
MittelMache die Fabrik beanspruchbar:
- Rufe
CollectionServiceab und füge nahe am Anfanglocal owner = nilhinzu. - Platziere ein Schild auf
tycoon.Sign: ein SurfaceGui mit einem TextLabel namensStatus, das es ausfüllt, mit weißem, skaliertem Text auf dunklem Hintergrund und dem TextStep on the green pad to claim this factory, sowie einer FunktionsetSign(text). - Gib in
startDroppersofort zurück, wenn das AttributRunningdes Droppers gesetzt ist; andernfalls setze es und lösche es, wenn die Schleife endet. - Entferne die Zeile, die
tycoon.Dropperstartet. Wenn ein Spieler auftycoon.ClaimPadtritt und es keinen Besitzer gibt: Mache ihn zum Besitzer, färbe das Pad grau (Color3.fromRGB(120, 120, 120), SmoothPlastic), setze das Schild aufPlayer1's Factory(mit seinem Name) und starte jeden getaggten Dropper im Workspace. - Zahle am Sammler nur dem Besitzer aus (falls es einen gibt).
Drücke Play und beanspruche deine Fabrik, dann Check.
Probier es selbst
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")
-- Jeder Spieler erhält Cash auf der Bestenliste
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: ein kleines Objekt, das Cash wert ist und unter einem Dropper erscheint
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)
-- Das Förderband transportiert alles, was darauf liegt
tycoon.Conveyor.AssemblyLinearVelocity = Vector3.new(Settings.BeltSpeed, 0, 0)
-- Der Collector wandelt Ore in Cash um
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)
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.