Conquista la fabbrica
Lezione 6 di 18 del corso Gioco Roblox: Tycoon della fabbrica di Coddy.
Un tycoon appartiene a qualcuno. Il pad verde vicino all'ingresso lo rivendica: il primo giocatore a salirci diventa il proprietario, la fabbrica si avvia e viene pagato solo il proprietario. Il proprietario è una variabile all'inizio dello script, nil finché qualcuno non rivendica la fabbrica:
local owner = nil
claimPad.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player and not owner then
owner = player
end
end)Quando la fabbrica viene rivendicata, ogni dropper al suo interno si avvia. I dropper hanno un tag, Dropper, così CollectionService:GetTagged("Dropper") li trova tutti, ovunque si trovino. I dropper acquistati aspetteranno in ServerStorage, quindi si avviano solo quelli presenti nel workspace.
In seguito, la fabbrica può essere rivendicata di nuovo dopo che il proprietario se ne va. Per evitare che un dropper esegua due cicli, startDropper contrassegna con un attributo i dropper in esecuzione e non fa nulla se è impostato.
Un cartello sopra la fabbrica indica a chi appartiene: una SurfaceGui su tycoon.Sign, come su qualsiasi cartello.
Sfida
MedioRendi reclamabile la fabbrica:
- Ottieni
CollectionServicee aggiungilocal owner = nilvicino all'inizio. - Metti un cartello su
tycoon.Sign: una SurfaceGui con un TextLabel chiamatoStatusche la riempie, con testo bianco ridimensionato su uno sfondo scuro, con la scrittaStep on the green pad to claim this factory, e una funzionesetSign(text). - In
startDropper, restituisci subito se l'attributoRunningdel dropper è impostato; altrimenti impostalo e cancellalo quando il ciclo termina. - Rimuovi la riga che avvia
tycoon.Dropper. Quando un giocatore sale sutycoon.ClaimPade non c'è un proprietario: assegnagli la proprietà, rendi grigio il pad (Color3.fromRGB(120, 120, 120), SmoothPlastic), imposta il cartello suPlayer1's Factory(usando il suo Name) e avvia ogni dropper contrassegnato nell'area di lavoro. - Paga solo il proprietario al collettore (se ce n'è uno).
Premi Play e rivendica la tua fabbrica, poi Check.
Provalo tu
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")
-- Ogni giocatore riceve Cash nella classifica
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: un piccolo oggetto che vale Cash, rilasciato sotto un dropper
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)
-- Il nastro trasportatore trasporta tutto ciò che vi si trova sopra
tycoon.Conveyor.AssemblyLinearVelocity = Vector3.new(Settings.BeltSpeed, 0, 0)
-- Il raccoglitore trasforma Ore in Cash
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)
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Gioco Roblox: Tycoon della fabbrica
4Trasformalo in un gioco
Fabbrica completata