Pour la prochaine étape du game loop, les joueurs doivent vendre leurs objets pour le gold pour leur permettre d'acheter plus d'espace dans leurs sacs à dos.
Créer une plate-forme de vente
Les joueurs vendront leurs articles en montant sur une plate-forme qui leur donne de l'or pour chaque article dans leur sac.
Configurer la plate-forme
La plate-forme peut être n'importe quelle partie et inclura un script qui gère la vente.
Créez une nouvelle partie nommée SellPlatform. Personnalisez-la pour refléter le thème de votre expérience.
Dans SellPlatform, créez un nouveau script nommé SellScript et ajoutez un commenter.
Dans SellScript, typez local sellPart = script.Parent pour obtenir la partie SellPlatform.
-- Vend tous les articles d'un joueur et les donne en orlocal sellPart = script.Parent
Gestion des événements de touche
Pour utiliser la plateforme, le script a besoin d'une fonction pour vérifier si un joueur le touche.
Créer une fonction nommée onTouch() qui vérifie si un joueur touche la plateforme.
local function onTouch(partTouched)local character = partTouched.ParentendPour modifier l'une des statistiques sur le tableau de bord, le script doit savoir quel joueur contrôle le personnage. Dans la déclaration if, utilisez la fonction GetPlayerFromCharacter() pour trouver un joueur.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)Sur la prochaine ligne, obtenez le conteneur de statistiques leader de ce joueur.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- Obtient le classementsdu joueur. Nécessaire pour obtenir des articles et de l'argentlocal playerStats = player:FindFirstChild("leaderstats")endSur la prochaine ligne, créez des variables pour obtenir l'argent et les articles du joueur.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- Obtient le classementsdu joueur. Nécessaire pour obtenir des articles et de l'argentlocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Obtient les articles et l'argent du joueurlocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")endendPour vérifier votre travail, ajoutez une déclaration d'impression qui s'exécute si un joueur touche vendPart.
local playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")print("A player touched sellPart")Au bas du script, connectez le onTouch() pour vendre l'événement Touched de la partie.
local Players = game:GetService("Players")local function onTouch(partTouched)local character = partTouched.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Obtient le classementsdu joueur. Nécessaire pour obtenir des articles et de l'argentlocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Obtient les articles et l'argent du joueurlocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")print("A player touched sellPart")endendendsellPart.Touched:Connect(onTouch)Jouez votre projet et passez sur sellPart ; vous devriez voir le message "A Player touched sellPart" dans la fenêtre de sortie.
Vendre des articles
Dans cette expérience, un joueur obtiendra 100 Or pour chaque item. Après avoir obtenu de l'argent, leurs articles seront réinitialisés à 0, permettant aux joueurs d'explorer le monde pour plus d'articles.
Codage d'une nouvelle fonction de vente
Sous les variables, créez une fonction nommée sellItems() qui obtient deux paramètres nommés playerItems et playerGold.
-- Vend tous les articles d'un joueur et les donne en orlocal sellPart = script.Parentlocal function sellItems(playerItems, playerGold)endlocal function onTouch(partTouched)Pour donner aux joueurs le bon montant d'or, prenez la valeur des playerItems et multipliez-la par le montant d'or qu'ils doivent recevoir par item. Cet exemple donne 100 pièces d'or par item.
Dans la fonction sellItems(), typez local totalSell = playerItems.Value * 100
local function sellItems(playerItems, playerGold)-- Obtient le nombre d'objets que le joueur a et multiplie ce nombre par leur valeur d'objet.local totalSell = playerItems.Value * 100endTapez playerGold.Value += totalSell pour ajouter l'or pour les articles à leur or actuel.
local function sellItems(playerItems, playerGold)local totalSell = playerItems.Value * 100-- Ajouter combien le joueur gagne à son argentplayerGold.Value += totalSellendTapez playerItems.Value = 0 . Ceci réinitialise les éléments d'un joueur à 0. Si les éléments d'un joueur ne sont pas réinitialisés à 0, le script continuera à donner aux joueurs de l'or sans s'arrêter.
local function sellItems(playerItems, playerGold)local totalSell = playerItems.Value * 100playerGold.Value += totalSellplayerItems.Value = 0endDans la fonction onTouch(), sous la deuxième if statement:, appelez la fonction sellItems() . Passer les paramètres, sellItems() et 1> playerGold1> afin qu'ils puissent être modifiés.
local Players = game:GetService("Players")local player = Players:GetPlayerFromCharacter(character)if player then-- Obtient le classementsdu joueur. Nécessaire pour obtenir des articles et de l'argentlocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- Obtient les articles et l'argent du joueurlocal playerItems = playerStats:FindFirstChild("Items")local playerGold = playerStats:FindFirstChild("Gold")if playerItems and playerGold thensellItems(playerItems, playerGold)endendendJouez votre projet ; vérifiez que chaque fois qu'un joueur marche sur la plateforme, leur or augmente et leurs articles sont réglés sur 0.
Conseils de débogage
À ce stade, la vente d'objets ne fonctionne pas comme prévu, essayez l'un des suivants ci-dessous.
- sellItems() est appelé dans la deuxième ligne si la déclaration vérifie les articles du joueur.
- Tout intérêt, comme les éléments de joueur, utilise .Value à la fin si vous apportez une modification à celui-ci. La valeur est toujours en majuscules.
- sellPart.Touched:Connect(onTouch) est saisi au bas * de * le script.
- sellItems(playerItems, playerGold) est écrit avant la fin du if humanoid then statement.