Boutique : monnaie virtuelle

Les vendeurs de Minecraft utilisent l’émeraude comme monnaie du jeu. Nous allons voir dans cet article comment utiliser une monnaie plus sécurisée car dématérialisée.

Avant-propos

Pour mettre en place une boutique en jeu, nous pouvons utiliser des objets (émeraudes, diamants) ou mettre en place une monnaie virtuelle. Si nous mettions en place une monnaie sous forme d’objet, d’autres joueurs pourraient nous voler nos crédits (en fouillant nos coffres ou en nous tuant par exemple). L’avantage d’une monnaie virtuelle, c’est qu’il est impossible de se faire voler. Et comme nous utiliserons des commandes, il devient facile de faire gagner des crédits avec des progrès par exemple. Dans cet article, nous appellerons la monnaie virtuelle crédits.

Tableau de score

Dans Minecraft, nous utilisons le tableau de score pour enregistrer des données. Pour les développeurs, c’est ce qui s’approche le plus d’une variable dans le jeu. Nous commencerons par créer le dossier functions/bank dans notre notre datapack. Il contiendra toutes les fonctions relatives au système de monnaie. On créé ensuite un fichier init.mcfunction qui va contenir les commandes à effectuer lors du premier lancement du datapack. Pour commencer, nous allons déclarer le score que nous utiliserons par la suite pour manipuler le portefeuille des joueurs. Dans cet exemple, nous l’appellerons bank. Mais nous pourrions également l’appeler wallet, coins, … Je préfère ici utiliser un nom en anglais pour les scores avec un nom d’affichage en français.

scoreboard objectives add bank dummy "Crédits"

La commande scoreboard permet de manipuler les données du tableau de score. Ici, on créé un objectif nommé bank et de type dummy. Cela signifie qu’il ne pourra être modifié que par des commandes. Il existe plus d’une dizaine de types d’objectif. Le type trigger par exemple permet au joueur de manipuler la valeur de l’objectif avec la commande trigger. Sur notre serveur, on se sert d’un objectif de type trigger pour permettre aux joueurs de se téléporter au spawn.

Ensuite, nous devons demander à Minecraft de lancer la fonction init au chargement du datapack. Pour cela, nous créons le fichier suivant : data/minecraft/tags/functions/load.json

{
    "values": [
        "mangarmor:bank/init"
    ]
}

Ce fichier json contient la liste des fonctions à exécuter lors du chargement du datapack.

Solde du portefeuille

Commençons par permettre aux joueurs de connaître la valeur de leur portefeuille. Pour cela, nous utiliserons les commandes execute pour tester la valeur et tellraw pour envoyer un message au joueur.

execute if score @s bank matches ..-1 run tellraw @s ["",{"text":"Banque :","color":"gold"}," Tu as un déficit de ",{"score":{"name":"@s","objective":"bank"},"color":"red"},{"text":" crédits","color":"gold","hoverEvent":{"action":"show_text","value":"Monnaie du serveur"}},"."]
#tellraw @s[scores={bank=..-1}] ["",{"text":"Banque :","color":"gold"}," Tu as un déficit de ",{"score":{"name":"@s","objective":"bank"},"color":"red"},{"text":" crédits","color":"gold","hoverEvent":{"action":"show_text","value":"Monnaie du serveur"}},"."]
execute if score @s bank matches 0..1 run tellraw @s ["",{"text":"Banque :","color":"gold"}," Il te reste ",{"score":{"name":"@s","objective":"bank"}},{"text":" crédit","color":"gold","hoverEvent":{"action":"show_text","value":"Monnaie du serveur"}},"."]
execute if score @s bank matches 2.. run tellraw @s ["",{"text":"Banque :","color":"gold"}," Il te reste ",{"score":{"name":"@s","objective":"bank"}},{"text":" crédits","color":"gold","hoverEvent":{"action":"show_text","value":"Monnaie du serveur"}},"."]

J’ai configuré ici trois messages. Le premier s’affiche quand le joueur a moins de 0 crédits (solde négatif). Normalement ça ne devrait pas arriver mais autant prévoir tous les cas possibles dès le début. La commande execute va donc vérifier si le joueur a un objectif bank inférieur ou égal à -1. À noter qu’il est également possible de cibler directement le joueur avec la condition de l’objectif sans utiliser la commande execute. L’exemple est donné sur la deuxième ligne qui est commentée.

La ligne suivante est une phrase au singulier dans le cas où le joueur n’a pas de crédit ou en a un seul. La dernière ligne sert dans le cas où le joueur à plusieurs crédits.

Manipulation des crédits

Maintenant qu’il est possible de connaître le solde d’un portefeuille, nous allons créer les fonctions pour le modifier. Commençons par permettre de gagner un crédit. Je créé un dossier add dans le dossier bank. Il contiendra toutes les fonctions pour ajouter des crédits (lors de la réalisation d’un progrès par exemple).

scoreboard players add @s bank 1
tellraw @s ["",{"text":"Banque :","color":"gold"}," Tu as reçu 1 ",{"text":"crédit","color":"gold","hoverEvent":{"action":"show_text","value":"Monnaie du serveur"}},"."]
function mangarmor:bank/balance

Tout d’abord, la commande scoreboard est utilisée pour ajouter 1 à l’objectif bank du joueur. Un message est ensuite envoyé au joueur pour l’informé de cet ajout. Enfin, la fonction crée précédemment est appelée pour indiquer au joueur le montant disponible dans son portefeuille.

Ensuite, je créé le dossier remove pour les fonctions qui permettent de supprimer des crédits (lors d’un achat par exemple). Les commandes sont relativement proches des précédentes. On remplacement simplement add par remove dans la commande scoreboard et on modifie le message envoyé au joueur.

scoreboard players remove @s bank 1
tellraw @s ["",{"text":"Banque :","color":"gold"}," Tu as perdu 1 ",{"text":"crédit","color":"gold","hoverEvent":{"action":"show_text","value":"Monnaie du serveur"}},"."]
function mangarmor:bank/balance

Maintenant que nous avons nos fonctions de base, nous pouvons en créer pour ajouter ou retirer d’autres valeurs suivant nos besoins. Le datapack téléchargeable en bas de cette page contient ainsi des fonctions pour 10 et 20 crédits.

Dernières modifications

Pour être certain que le datapack est bien chargé, on peut ajouter cette commande dans la fonction init :

tellraw @a ["",{"text":"Banque :","color":"gold"}," datapack chargé"]

Maintenant, on peut utiliser la commande function pour donner des crédits à un joueur (AcrewFR) :

/execute as AcrewFR run function mangarmor:bank/add/10

Téléchargement

Le datapack de ce tutoriel est disponible au téléchargement sur Dropbox. Il contient les fonctions pour mettre en place la monnaie virtuelle et pour permettre d’ajouter ou supprimer 1, 10 ou 20 crédits.

Sommaire

Partager

Partager sur facebook
Facebook
Partager sur twitter
Twitter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.