Guide: Les banques et comment les utiliser ?

Les banques sont une particularité très intéressante de Starcraft 2 et permettent de récupérer des informations inter-cartes. C’est notamment grâce aux banques que les caractéristiques de votre progression du mode Campagne sont sauvegardées. Cela étant dit, il y a beaucoup à faire pour réaliser un système entier utilisant les banques, efficace et protégé contre les hacks les plus faciles. Êtes-vous prêt à en apprendre plus ? C’est par ici !

Concept de ce guide

Nous allons dans ce guide aborder les fonctions et choses à faire pour avoir un système de banques fonctionnel. Il est probable que vous trouveriez des librairies qui vous mâcheront ce boulot sur Internet. Pour autant que la librairie est bien réalisée, c’est encore sans doute le meilleur moyen pour raccourcir la durée de développement d’un projet.

Nous allons réaliser 5 fonctions que nous allons appeler à différents moments dans différents déclencheurs. Il est probable que les déclencheurs que je vais décrire changeront de votre côté, en fonction du jeu ou de la carte que vous êtes en train de réaliser. Notez que je part d’un à-priori très paranoïaque sur la vérification ici, vous n’êtes pas obligé de faire une vérification aussi poussée.

Dans la théorie

Nous allons créer 5 fonctions différentes :

  • Ouvrir fichier de banque
  • Fermer fichier de banque
  • Sauvegarder les données du fichier de banque
  • Réinitialiser fichier de banque
  • Charger les données du fichier de banque

Parallèlement, il vous faudra sans doute aussi un Enregistrement et une variable de ce type, afin de sauvegarder les données du fichier de banque en mémoire et pouvoir y accéder à loisir.

Dans la pratique

Enregistrements et variables

Les données du fichier de banque vont devoir être certainement sauvegardées pour chaque joueur.

Commencez par créer un Enregistrement et nommez le « Structure des données de banque ». Dedans, ajoutez 5 variables – ceci n’est qu’un exemple, vous devrez y indiquer le type de données que vous utiliserez dans l’enregistrement :

  • « Type » de type Chaîne de caractères
  • « Inventaire », tableau de 6 éléments, de type Chaîne de caractères
  • « Nombre de tués », de type Entier
  • « Expérience », de type Réel

Vous l’aurez donc compris, notre banque va sauvegarder le type de héros du joueur, son inventaire, le nombre de tués et l’expérience qu’il a obtenu.

Créez une nouvelle variable globale de type « Enregistrement » -> « Données de banque ». Nommez votre variable « Données de banque ».

Prérequis d’initialisation

Les banques ne peuvent être ouvertes que si elles sont pré-chargées lors de l’initialisation de la carte. Le problème, c’est que la fonction « Précharger banque » nécessitera une chaîne de caractères qui ne peut PAS être une variable. Il va donc falloir indiquer le nom de votre banque « en dur » dans l’éditeur. De même pour l’entier représentant le joueur.

Créez un nouveau déclencheur. Ajoutez comme évènement « Génération de la carte ». Comme action, ajoutez « Précharger banque ». Pour le paramètre, indiquez « BanqueExemple ».

Concrètement, par rapport au paragraphe précédent, si nous devons charger la même banque pour 16 joueurs, il va falloir faire 16 actions différentes en changeant à chaque fois l’entier représentant le joueur. Impossible de faire une boucle à ce stade, où la fonction ne marcherait pas :

Fonction « Ouvrir fichier de banque »

Maintenant, il est temps de créer la fonction d’ouverture de banque. Créez une nouvelle fonction. Sélectionnez le type « Fonction » dans les paramètres. Indiquez « Banque » comme valeur de retour. Voici le contenu de la fonction en détail. Normalement, avec votre connaissance de l’éditeur, cela ne devrait pas vous poser trop de problèmes de le reproduire :

Pour le reste, c’est assez simple à comprendre : nous allons tout simplement vérifier que le fichier existe, sinon on l’initialise. On vérifie également que la banque corresponde et qu’elle n’aie pas été trafiquée en dehors du jeu. Ensuite, on vérifie que les données de la banque soient utilisables.

Fonction « Vérifier fichier de banque »

Nous allons devoir vérifier 2 choses. Premièrement, il faut vérifier la valeur de hashage définie dans notre banque.Concrètement, le jeu nous donne une possibilité de « hasher » le contenu du fichier de banque dans un identifiant de hashage qui peut-être vérifiée. C’est précisément cette vérification que l’on va faire ici. L’utilisation d’une telle vérification permet d’éviter que quelqu’un puisse modifier le contenu du fichier de banques en dehors du jeu.

Deuxièmement, il faut que le joueur qui joue actuellement soit le même que celui qui est sauvegardé dans la banque. Dernièrement, Blizzard a rendu disponible une fonction qui permet d’obtenir une valeur permettant d’identifier un joueur unique. Cet identifiant ne change pas quand il change son nom SC2 via le service payant. De cette manière, on va vérifier que le fichier de banques n’a pas été « distribué » à une autre personne et qu’elle appartient bien à la personne d’origine lors de l’initialisation de la banque. Reproduisez cette nouvelle fonction de type « Fonction », prenant un paramètre « Banque » et une valeur de retour booléenne :

Fonction « Réinitialiser fichier de banque »

La fonction de réinitialisation va vider l’entièreté des données du fichier de banque et en reproduire des nouvelles, par défaut. Notez que par défaut, on ajoute une valeur unique représentant le joueur. Créez cette fonction :

Fonction « Charger données fichier de banque »

Cette fonction va transférer le contenu de la banque vers une variable structurée de la même manière. C’est l’enregistrement que l’on a défini plus tôt dans ce guide qui va nous servir ici. Créez une nouvelle fonction comme suit :

Fonction « Sauvegarder données fichier de banque »

Cette fonction va transférer le contenu de notre variable structurée vers la banque et sauvegarder le contenu. C’est également cette fonction qui va définir le code hashage. Vous ne devez utiliser l’action « Définir l’option de signature » (qui s’occupe du code de hashage) qu’une fois avoir inséré tous les éléments, c’est-à-dire juste avant la sauvegarde. Dans toute autre cas, le code de hashage sera erroné (puisque généré avant d’avoir ajouté toutes les données) et elles ne concorderont plus avec le contenu, résultant une vérification (méthode réalisée plus haut) qui retournera toujours faux.

Déclencheurs additionnels

Comme vous avez pu le voir dans le déclencheur de l’initialisation, nous préchargeons et chargeons les banques au démarrage de la carte.

Pour la sauvegarde des données, chaque joueur sauvegardera les données à des moments différents. En réalité, cela dépend de quand chaque joueur quitte la partie, et comme n’importe qui peut quitter la partie à n’importe quel moment, il ne faut pas sauvegarder les données une fois la partie terminée – sauf si vous en décidez autrement – mais juste avant qu’une personne quitte la partie :

Notes supplémentaires

Sérialisation et dé-sérialisation

Il est impossible de « sérialiser » (passer d’une version mémoire à une version fichier) un grand nombre de type de variables. Voici celles que vous pouvez sérialiser :

  • Chaîne de caractères
  • Entier
  • Réel
  • Booléen
  • Point
  • Unité

Pour toutes les autres, et notamment pour les données qui référence une entrée du catalogue, il vous faudra stocker la chaîne qui représente l’identifiant de l’objet du catalogue que vous désirez mémoriser.

Lien de téléchargement

Il est possible que vous préfériez changer une partie du code et ça peut aisément se comprendre. Cela étant dit, je ne vais pas vous offrir le luxe suprême de copier toutes ces fonctions à la main (*teuheu*). Voici le lien de téléchargement d’une carte exemple qui montre l’ensemble de ces notions.

TELECHARGER LA CARTE EXEMPLE

Laisser un commentaire