Réclamez l’usine
Leçon 6 sur 18 du cours Jeu Roblox : Tycoon d’usine de Coddy.
Un tycoon appartient à quelqu’un. La plaque verte près de l’entrée permet de le revendiquer : le premier joueur qui marche dessus en devient le propriétaire, l’usine démarre et seul le propriétaire est payé. Le propriétaire est une variable en haut du script, à nil jusqu’à ce que quelqu’un revendique l’usine :
local owner = nil
claimPad.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player and not owner then
owner = player
end
end)Quand l’usine est revendiquée, chaque distributeur qu’elle contient démarre. Les distributeurs portent une balise, Dropper, afin que CollectionService:GetTagged("Dropper") les trouve tous, où qu’ils se trouvent. Les distributeurs achetés attendront dans ServerStorage ; seuls ceux qui se trouvent dans l’espace de travail démarrent donc.
Plus tard, l’usine peut être revendiquée à nouveau après le départ de son propriétaire. Pour qu’aucun distributeur ne lance jamais deux boucles, startDropper marque un distributeur en cours d’exécution avec un attribut et ne fait rien si celui-ci est défini.
Un panneau au-dessus de l’usine indique à qui elle appartient : un SurfaceGui sur tycoon.Sign, comme sur n’importe quel panneau.
Défi
MoyenRendre l’usine revendicable :
- Récupère
CollectionServiceet ajoutelocal owner = nilprès du début. - Place un panneau sur
tycoon.Sign: un SurfaceGui avec un TextLabel nomméStatusqui le remplit, avec du texte blanc mis à l’échelle sur un fond sombre, affichantStep on the green pad to claim this factory, et une fonctionsetSign(text). - Dans
startDropper, retourne immédiatement si l’attributRunningdu dropper est défini ; sinon, définis-le, puis efface-le lorsque la boucle se termine. - Supprime la ligne qui démarre
tycoon.Dropper. Lorsqu’un joueur marche surtycoon.ClaimPadet qu’il n’y a pas de propriétaire : fais-en le propriétaire, grise la plateforme (Color3.fromRGB(120, 120, 120), SmoothPlastic), définis le panneau surPlayer1's Factory(avec son Name), et démarre chaque dropper balisé dans l’espace de travail. - Ne paie que le propriétaire au collecteur (s’il y en a un).
Appuie sur Play et revendique ton usine, puis sur Check.
Essayez vous-même
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")
-- Chaque joueur reçoit du Cash dans le classement
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 : une petite pièce qui vaut du Cash, lâchée sous 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)
-- Le convoyeur transporte tout ce qui repose dessus
tycoon.Conveyor.AssemblyLinearVelocity = Vector3.new(Settings.BeltSpeed, 0, 0)
-- Le collecteur transforme le minerai en 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)
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.