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
endJedes 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.
Aufgabe
MittelBring das erste Pad zum Laufen:
- Hole
ServerStorageund behaltelocal items = ServerStorage.TycoonItemsweiter oben. - Wenn ein Spieler
tycoon.Buttons.Dropper2Padberührt: Tu nichts, es sei denn, der Spieler ist der Besitzer und das Pad befindet sich noch intycoon.Buttons. Wenn sein Cash mindestens demPrice-Attribut des Pads entspricht, ziehe den Preis ab, verschiebe das Pad nach ServerStorage, verschiebeitems.Dropper2nachtycoon.Builtund 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)
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.