Menu
CoddyTech

Une plateforme d’achat

Leçon 7 sur 18 du cours Jeu Roblox : Tycoon d’usine de Coddy.

L’argent est fait pour être dépensé. Chaque dalle bleue devant le tapis roulant permet d’acheter quelque chose ; la première permet d’acheter un deuxième distributeur. Une dalle connaît son prix grâce à un attribut, Price, défini lors de la construction du monde.

L’objet qu’elle permet d’acheter attend dans ServerStorage.TycoonItems, déjà au bon endroit. L’achat le déplace dans le dossier Built de l’usine, ce qui le place dans le monde, et déplace la dalle dans ServerStorage, où personne ne peut marcher dessus. Elle est déplacée, pas détruite : une leçon ultérieure fera réapparaître les dalles.

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

Chaque membre qui touche la dalle déclenche Touched, plusieurs fois au même instant. Après que le premier a effectué l’achat, la dalle ne se trouve plus dans tycoon.Buttons ; vérifier cela en premier empêche donc un double achat.

challenge icon

Défi

Moyen

Fais fonctionner le premier bouton :

  1. Récupère ServerStorage et garde local items = ServerStorage.TycoonItems près du début.
  2. Quand un joueur touche tycoon.Buttons.Dropper2Pad : ne fais rien, sauf s’il est le propriétaire et que le bouton se trouve toujours dans tycoon.Buttons. Si son Cash est supérieur ou égal à l’attribut Price du bouton, déduis le prix, déplace le bouton dans ServerStorage, déplace items.Dropper2 dans tycoon.Built et démarre-le.

Appuie sur Play, gagne 30 Cash et achète-le, puis appuie sur Check.

Essayez vous-même

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

-- Chaque joueur reçoit des 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)

-- Le panneau au-dessus de l'usine
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

-- Ore : une petite pièce qui vaut des 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

-- Un dropper n'exécute qu'une seule boucle, quel que soit le nombre de fois où il est démarré
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

-- Le convoyeur transporte tout ce qui repose dessus
tycoon.Conveyor.AssemblyLinearVelocity = Vector3.new(Settings.BeltSpeed, 0, 0)

-- Le collecteur transforme Ore en Cash
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)

-- Attribution : le premier joueur à marcher sur la plateforme devient propriétaire de l'usine
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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Jeu Roblox : Tycoon d’usine