En fait, la description de l'objet/hotspot/
personnage*, ne change pas. C'est la chaîne de caractères renvoyée qu'on modifie. En l'occurrence, j'ai d'abord créé un GUI placé en bas de l'écran auquel j'ai ajouté un
label (appelons-le
lblDescription). En tant normal, si l'on souhaite que la description de l'objet survolé soit constante, on entrera @OVERHOTSPOT@ comme texte de ce
label, et il affichera donc la description de la zone survolée. Mais si on veut que ce texte varie, il faut aller dans le code.
Avant cela, rappelons que les objets et hotspot dépendent de la pièce dans laquelle on se trouve, et le plus simple/sûr est de faire appel aux
propriétés personnalisées. Prenons le cas des portes dans
L'Affaire Aspirox : selon qu'on a visité ou non la pièce, la description affichera "Pièce inconnue" ou le contenu de la pièce concernée. Il y a plusieurs solutions, personnellement j'ai choisi d'entrer comme description de base pour chaque porte "Pièce Inconnue", puis créé une propriété personnalisée textuelle "Correspondance" (voire "Correspondance2", si je veux ajouter un troisième cas, comme pour le bureau de Lespinas) dans laquelle j'entre la deuxième description, par exemple "Cafétéria". Ensuite il n'y a plus qu'à coder le comportement du label qu'on a créé au début.
Remarque : dans mon cas j'ai utilisé un module pour ne pas avoir à faire un code pour chaque hotspot. Mais pour comprendre le fonctionnement général, on va partir du principe qu'on n'utilise pas ce module. Si tu veux plus d'infos à ce sujet n'hésite pas à me demander (ici, même sans module on pourrait créer une autre propriété personnalisée pour se simplifier la vie, mais je n'entre pas dans les détails pour le moment sinon on va se perdre en route).On commence par définir une variable
String qui contiendra la chaîne de caractère qu'on affichera ensuite. Puis on va définir le texte à attribuer selon ce qui est survolé.
- Code:
-
function repeatedly_execute(){
String Description;
Hotspot* hsurvol = Character.GetAtScreenXY(mouse.x, mouse.y);
if ((hsurvol != null) {
if ((hsurvol.GetTextProperty("Correspondance") == "Cafétéria") && (HasPlayerBeenInRoom(1))) Description = hsurvol.GetTextProperty("Correspondance");
else if ((hsurvol.GetTextProperty("Correspondance") == "Bureau Inoccupé") && (HasPlayerBeenInRoom(2)) Description = hsurvol.GetTextProperty("Correspondance");
else if ((hsurvol.GetTextProperty("Correspondance") == "Bureau du Designer") && (HasPlayerBeenInRoom(3)) Description = hsurvol.GetTextProperty("Correspondance");
//Comme l'effet est le même selon ces 3 conditions, on aurait pu coder tout ça sur une seule ligne, mais ce sera plus clair de cette manière.
else Description = hsurvol.Name;
}
Attention : ce code est donné à titre indicatif, il contient peut-être quelques petites erreurs.Il n'y a plus qu'à associer le texte du
label qu'on a créé à la variable
Description :
- Code:
-
lblDescription = Description;
Après la méthode dépendra de ce que tu veux faire précisément, dans certains cas tu devras créer des variables globales, pour vérifier si le joueur connait déjà le nom d'un personnage par exemple, etc... À noter que ce code ne change pas la description des hotspot dans l'absolu, mais simplement le texte de l'étiquette (
label). Si tu veux utiliser cette description à plusieurs endroits, il faudra coder la variable
Description sous la forme d'une fonction.
J'espère ne pas avoir été trop confus. Remercions
Kitai (et peut-être
Billbis ?) dont j'ai en partie repris ici les conseils qu'il m'avait donné quand je m'étais trouvé devant ce problème à l'époque.
Edit :
En fait je n'arrive pas à remettre la main sur cette explication précise (j'ai juste trouvé des trucs qui tournent autour) donc si ça se trouve, j'avais en fait fait tout ça avec mes petits doigts, va savoir !Ah si, c'est surtout ici que j'ai compris le principe :
https://adventuregamestudio.1fr1.net/t2099-resolu-plusieurs-walk-behinds-area-description-objets#33122Mais du coup le problème était assez différent, même si le principe est un peu le même. Ce lien peut être intéressant à consulter en ce qui concerne les descriptions "dynamiques".
*J'avais commencé à évoquer le cas particulier "personnage" dans mon explication, mais il se trouve que dans ce cas, la variable Name n'est pas en lecture seule. Le problème ne se pose donc pas (je n'en avais d'ailleurs pas tenu compte dans mon code).