Menu
CoddyTech

Ein Kauf-Pad

Lektion 7 von 18 im Kurs Roblox-Spiel: Fabrik-Tycoon von Coddy.

Bargeld ist zum Ausgeben da. Die blauen Pads vor dem Förderband kaufen jeweils etwas; mit dem ersten kaufst du einen zweiten Spender. Ein Pad kennt seinen Preis über ein Attribut namens Price, das beim Erstellen der Welt festgelegt wurde.

Der gekaufte Gegenstand wartet in ServerStorage.TycoonItems bereits am richtigen Ort. Beim Kauf wird er in den Ordner Built der Fabrik verschoben, wodurch er in der Welt erscheint, und das Pad wird nach ServerStorage verschoben, wo niemand darauf treten kann. Verschoben, nicht zerstört: In einer späteren Lektion kommen die Pads zurück.

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

Jedes Gliedmaß, das das Pad berührt, löst Touched aus, und zwar mehrmals im selben Moment. Nach dem ersten Kauf befindet sich das Pad nicht mehr in tycoon.Buttons, daher verhindert eine vorherige Überprüfung einen doppelten Kauf.

challenge icon

Aufgabe

Mittel

Bring das erste Pad zum Laufen:

  1. Hole ServerStorage und behalte local items = ServerStorage.TycoonItems weiter oben.
  2. Wenn ein Spieler tycoon.Buttons.Dropper2Pad berührt: Tu nichts, es sei denn, der Spieler ist der Besitzer und das Pad befindet sich noch in tycoon.Buttons. Wenn sein Cash mindestens dem Price-Attribut des Pads entspricht, ziehe den Preis ab, verschiebe das Pad nach ServerStorage, verschiebe items.Dropper2 nach tycoon.Built und starte es.

Drücke Spielen, verdiene 30 Cash und kaufe es, dann Prüfen.

Probier es selbst

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

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

-- Das Schild über der Fabrik
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

-- Erz: ein kleines Teil im Wert von Cash, das unter einem Dropper abgeworfen wird
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

-- Ein Dropper führt nur eine Schleife aus, egal wie oft er gestartet wird
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

-- Das Förderband transportiert alles, was darauf liegt
tycoon.Conveyor.AssemblyLinearVelocity = Vector3.new(Settings.BeltSpeed, 0, 0)

-- Der Sammler wandelt Erz in Cash um
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)

-- Beanspruchung: Der erste Spieler, der das Feld betritt, besitzt die Fabrik
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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Roblox-Spiel: Fabrik-Tycoon