| Mode "aller" sur un hotspot actif ou inactif | |
|
|
Auteur | Message |
---|
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: Mode "aller" sur un hotspot actif ou inactif Jeu 17 Fév 2022 - 7:41 | |
| Bonjour. Je fais maintenant face à un problème un peu relou: Comme vous l'avez peut-être vu sur le forum, j'ai mis en place un curseur dynamique de type Sierra, clic droit pour changer de mode, clic gauche pour le processclick. Je souhaiterais, sur un hotspot qui a une propriété "condamné" false ou true (qui signifie "je peux pas y aller" et "je peux y aller"), que mon personnage agisse en fonction de celui-ci. Problème: Il n'y a pas de mode "Aller" de base. Je veux dire avec l'icône petit éclair proposé dans les propriétés des hotspots. J'ai donc tenté un code comme celui-ci: - Code:
-
function hSortie_AnyClick() { if (((hSortie.GetProperty("Condamné")==false))&&(mouse.Mode == eModeAller)&&(Mouse.IsButtonDown(eMouseLeft))) { player.Say("Je n'ai pas l'autorisation..."); } if (((hSortie.GetProperty("Condamné")==true))&&(mouse.Mode == eModeAller)&&(Mouse.IsButtonDown(eMouseLeft))) { player.ChangeRoom(2); } }
...Qui ne fait pas l'affaire. À savoir que lorsque je tente un code similaire sur une fonction disponible de base comme "Look" ou "Interact" (en proposant bien sûr dans le mouse.Mode un eModeRegarder ou un eModeMain)... Tout se passe à merveille. Voilà... Je ne sais pas comment régler ça... Donc si vous avez une idée... Merci. _________________ L' est si forte à la course qu'elle en sort de la phrase. autruche
|
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Mode "aller" sur un hotspot actif ou inactif Jeu 17 Fév 2022 - 15:41 | |
| Dans la liste des curseurs, tu as deux modes personnalisables, nommés par défaut "Usermode1" et "Usermode2". J'ai modifié le nom de "Usermode1" que j'ai remplacé par "AllerVers" dans la capture suivante : En modifiant le nom du curseur, ça édite automatiquement la liste des events de la room, comme ici : Tu n'as plus qu'à utiliser ce(s) nouveau(x) mode(s) exactement de la même manière que les modes par défaut. Est-ce que ça fait l'affaire ? Edit : J'aurais dû parler de modes "bonus" plutôt que personnalisables, parce que dans l'absolu, ils sont tous personnalisables. En soi les modes "Usermode1" et "Usermode2", n'ont rien de différent des autres modes. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: Re: Mode "aller" sur un hotspot actif ou inactif Jeu 17 Fév 2022 - 15:59 | |
| Merci, je pense que je vais effectivement pouvoir machiner avec ceci... Mais là tel quel cela ne semble pas fonctionner. Dois-je faire un fonction particulière dans le global qui lui dit quoi faire ou un simple truc comme ceci est sensé faire le job ??? - Code:
-
function hSortie_Mode8() { if (((hotspot[2].GetProperty("Condamné")==false))&&(mouse.Mode == eModeAller)&&(Mouse.IsButtonDown(eMouseLeft))) { player.Say("Je n'ai pas l'autorisation..."); } if (((hotspot[2].GetProperty("Condamné")==true))&&(mouse.Mode == eModeAller)&&(Mouse.IsButtonDown(eMouseLeft))) { player.Walk(hotspot[2].WalkToX, hSortie.WalkToY, eBlock, eWalkableAreas); player.ChangeRoom(2); } }
_________________ L' est si forte à la course qu'elle en sort de la phrase. autruche
|
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Mode "aller" sur un hotspot actif ou inactif Jeu 17 Fév 2022 - 16:23 | |
| Qu'est-ce qui ne fonctionne pas ? Tu as ajouté un curseur et tu arrives à le sélectionner déjà ? Oui une fonction comme ça est censée faire le job, normalement. Par contre c'est inutile de vérifier que le bouton gauche est enfoncé. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: Re: Mode "aller" sur un hotspot actif ou inactif Jeu 17 Fév 2022 - 16:33 | |
| - valoulef a écrit:
- Qu'est-ce qui ne fonctionne pas ? Tu as ajouté un curseur et tu arrives à le sélectionner déjà ?
Je n'ai pas trop compris ta question, mais si c'est ce que tu voulais me dire, mon nouveau curseur fait bien apparaitre un nouveau mode (le 8 donc) dans les events du petit éclair jaune... Et j'ai donc tapé ces lignes... Et le résultat "player.Say" ou "Change Room" ne se fait pas. Et dans ce que j'ai prévu le clic gauche est nécessaire dans mes déclarations car je veux que cela se passe seulement si le joueur clique. _________________ L' est si forte à la course qu'elle en sort de la phrase. autruche
|
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Mode "aller" sur un hotspot actif ou inactif Jeu 17 Fév 2022 - 16:56 | |
| - Jorkz a écrit:
- Et dans ce que j'ai prévu le clic gauche est nécessaire dans mes déclarations car je veux que cela se passe seulement si le joueur clique.
La fonction est appelée si et seulement si le joueur clique avec le bon mode sur le hotspot, donc rajouter cette condition est inutilement redondant (et ça augmente le risque de bug). D'ailleurs, c'est aussi inutile de mettre une condition sur le mode de curseur, du coup. Tu as juste besoin de vérifier la propriété du hotspot. Dans tes tests, tu es sûr d'avoir sélectionner le bon mode de curseur ? _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: Re: Mode "aller" sur un hotspot actif ou inactif Jeu 17 Fév 2022 - 17:06 | |
| - valoulef a écrit:
- D'ailleurs, c'est aussi inutile de mettre une condition sur le mode de curseur, du coup. Tu as juste besoin de vérifier la propriété du hotspot
Ok mais tu es sûr de ça ? Je précise quand même que j'ai un curseur "dynamique" dans le sens où, en ayant suivi ton tuto vidéo, il se met en surbrillance à certains endroits. Sinon il a bien 4 modes... Mais qu'il faut passer avec un clic droit. Après ce qui est vraiment chelou c'est que ma fonction marche parfaitement dans les autres modes, donc je ne pense pas qu'il y ait interférence avec autre chose, d'autant que je viens à peine de créer ce mode. (le 8 ) Y'a quelque chose qui m'échappe je pense. _________________ L' est si forte à la course qu'elle en sort de la phrase. autruche
|
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Mode "aller" sur un hotspot actif ou inactif Jeu 17 Fév 2022 - 23:03 | |
| - Jorkz a écrit:
- Ok mais tu es sûr de ça ?
Je seconde ce qu'a dit @valoulef : étant donné le nom de ta fonction, je pense qu'elle est référencée dans la grille d'événements de ton hotspot dans la ligne qui correspond au mode 8 : cette configuration a pour résultat que la fonction est appelée si (et seulement si) l'interaction mode-8 avec le hotpot est exécutée. Sur la base de ton code dans l'autre sujet, un clic gauche normal dans ton jeu exécute Room.ProcessClick(mouse.x, mouse.y, mouse.Mode), ce qui va effectivement lancer l'interaction avec le hotspot en utilisant le mode où se trouve la souris au moment du clic Je sais pas si Mouse.IsButtonDown(eMouseLeft) vaut true au moment où l'interaction est exécutée : le bouton de la souris est enfoncé au moment où le clic est détecté, mais le temps que la réaction en chaîne exécute ta fonction hSortie_Mode8, je sais pas si c'est encore trueDans tous les cas, comme le remarque @valoulef, tu devrais enlever cette condition, puisque de toute façon ta fonction n'est exécutée que lors d'un clic (et uniquement lorsque le curseur est en mode 8, que j'imagine être le mode Aller) : - Code:
-
function hSortie_Mode8() { if (hotspot[2].GetProperty("Condamné")==false) { player.Say("Je n'ai pas l'autorisation..."); } else { player.Walk(hotspot[2].WalkToX, hSortie.WalkToY, eBlock, eWalkableAreas); player.ChangeRoom(2); } } _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: Re: Mode "aller" sur un hotspot actif ou inactif Ven 18 Fév 2022 - 6:44 | |
| Oui. De bon matin bien frais dispo tout ça me paraît bien évident en fait... Désolé valoulef mais je croyais que tu ne m'avais pas compris. J'ai modifié le code ci-dessus à l'identique (enfin, pas vraiment car j'ai cette fois enlevé l'accent de "Condamné", c'est mieux). Après, le problème, c'est ce que je disais hier à valoulef, ayant déjà plein de réglages pour mon curseur, j'avoue c'est un vrai casse-tête pour moi de switcher proprement du mode Aller au mode 8. Ma gestion du curseur est la suivante: - Code:
-
// comportement survol RIEN____________________________________________________
if ((hsurvol == hotspot[0])||(osurvol == null)||(csurvol == null)) { if (mouse.IsModeEnabled(eModeAller)) { mouse.ChangeModeGraphic(eModeAller,1); } if (mouse.IsModeEnabled(eModeRegarder)) { mouse.ChangeModeGraphic(eModeRegarder,3); } if (mouse.IsModeEnabled(eModeMain)) { mouse.ChangeModeGraphic(eModeMain,5); } if (mouse.IsModeEnabled (eModeParler)) { mouse.ChangeModeGraphic(eModeParler,7); } }
// comportement survol SORTIES DE ROOM__________________________________________
if ((hsurvol != hotspot[0])&&(mouse.IsModeEnabled(eModeAller))) { if(hsurvol.GetProperty("Sortie")== true) { mouse.ChangeModeGraphic(eModeAller,2); } if((hsurvol.GetProperty("Sortie")== false)||(hsurvol.GetProperty("Choopa")== true)) { mouse.ChangeModeGraphic(eModeAller,1); } }
// comportement survol POINTS CHAUDS____________________________________________ if ((hsurvol != hotspot[0])&&(hsurvol.GetProperty("Choopa")== true)) { if (mouse.IsModeEnabled(eModeRegarder)) { mouse.ChangeModeGraphic(eModeRegarder,4); } if (mouse.IsModeEnabled(eModeMain)) { mouse.ChangeModeGraphic(eModeMain,6); } } J'ai mis ici la partie qui nous intéresse vraiment, celle sur les hotspots. Je n'arrive pas à décortiquer le truc et je ne sais pas vraiment où changer quoi... D'autant que quand j'ai un truc qui se rapproche de ce que je veux je ne sais pas vraiment non plus quoi faire pour dire à AGS de quitter le Mode 8 / (eModeSortir)... Par exemple quand je clic droit ou "désurvole" du hotspot. Si vous avez une idée... Merci. EDIT: la propriété "Choopa" est un bool normal où je spécifie à certains points chauds que l'apparence du monde main (interact) change, et ceci pour faire des petites feintes au joueur (lui faire croire par exemple que le hotspot peut être un objet qu'il pourrait prendre à un moment). La propriété "Sortie" est également un bool pour se surbrillancer en mode aller sur les sorties de room possibles. (Je me demande par ailleurs si avoir créé en plus une propriété "Condamne" n'était pas de trop...) _________________ L' est si forte à la course qu'elle en sort de la phrase. autruche
|
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Mode "aller" sur un hotspot actif ou inactif Ven 18 Fév 2022 - 15:58 | |
| J'ai fait une petite erreur hier avec la solution que je t'ai donné sur le chat. Je reprends : Si je ne me trompe pas, ce que tu veux, c'est que quand le curseur est en mode aller (WalkTo), et que quand tu cliques sur un hotspot ayant la propriété "Sortir" sur true, alors au lieu que AGS exécute le comportement habituel du mode "WalkTo" (à savoir se déplacer vers les coordonnées de la souris), il exécute un event codé dans le script de ta room, telle une interaction classique. On a vu ensemble que pour éviter des conflits, le mode "WalkTo" ne peut déclencher d'event. J'ai donc proposé de tricher en faisant basculer le mode de curseur de "Aller" à un mode alternatif, au survol des hotspots concernés. Ce qui donne : - Code:
-
// comportement survol SORTIES DE ROOM__________________________________________
if ((hsurvol != hotspot[0])&&(mouse.IsModeEnabled(eModeAller))) { if(hsurvol.GetProperty("Sortie")== true) { mouse.Mode = eModeSortir; //Mettre à jour cette ligne (eModeSortir = nom donné au Mode 8 qui contient par défaut le curseur en surbrillance) } Ensuite, quand le curseur ne survole plus la zone, il faut repasser sur le mode "Aller". C'est ici que j'ai fait une petite erreur hier. On doit vérifier si le curseur est en mode "Sortir", et si c'est le cas, le basculer sur le premier mode. Ça donne ça : - Code:
-
// comportement survol RIEN____________________________________________________
if ((hsurvol == hotspot[0])||(osurvol == null)||(csurvol == null)) { if (mouse.Mode == eModeSortir){ //Ajouter ce bloc mouse.Mode = eModeAller; }//Fin de modification if (mouse.IsModeEnabled(eModeAller)) { mouse.ChangeModeGraphic(eModeAller,1); } Ensuite, tu n'as plus qu'à coder les events d'interaction du hotspot en mode "Sortir", et le tour est joué. - Jorkz a écrit:
- (enfin, pas vraiment car j'ai cette fois enlevé l'accent de "Condamné", c'est mieux)
Vu qu'il apparait entre guillemets, le nom des propriétés personnalisées est une chaîne de caractères ( String). Du coup, tu peux sans problème mettre des accents si tu le souhaites, mais c'est toi qui voit. - Jorkz a écrit:
- (Je me demande par ailleurs si avoir créé en plus une propriété "Condamne" n'était pas de trop...)
Tu pourrais faire autrement (avec une variable booléenne dans le script de la room, par exemple), mais c'est utile si en plus de distinguer les Hotspots "normaux" des sorties, tu veux distinguer les sorties ouvertes des sorties condamnées. C'est une méthode valable. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: Re: Mode "aller" sur un hotspot actif ou inactif Ven 18 Fév 2022 - 16:35 | |
| Salut et merci encore. Évidemment, ta solution fonctionne bien pour ce qui est du "pur survol", et j'avais déjà tenté un truc de ce type ce matin il me semble (mais ça marchait pas aussi bien )... Mais comme je disais le problème ensuite c'est la gestion de mon clic droit, car là il reste bloqué dans la zone voulue en mode "Sortir"... et c'est à ce niveau que je ne m'en sors plus, je ne sais pas où lui dire de désactiver ce mode 8 / Sortir si un clic droit est fait. j'ai fait ça dans la fonction onmouseclick: - Code:
-
//______________Clic DROIT normal = passe au mode suivant_________________ else if (button == eMouseRight) { player.ActiveInventory = null; mouse.SelectNextMode(); } else if /*(mouse.Mode == eModeSortir)*/((mouse.IsModeEnabled(eModeSortir))&&(button == eMouseRight)) { mouse.DisableMode(eModeSortir); mouse.Mode = eModeRegarder; } mais, avec la formule commentée en vert comme avec l'autre, ça ne fonctionne pas. Et deuxième problème, moins grave cependant mais pas tip top niveau gamedesign, c'est que de la même manière lorsqu'un objet d'inventaire est en curseur il se change lui aussi au niveau du survol... Mais ça je pense pouvoir le régler... ================= EDIT ======================= J'ai viens de tester ça, plus logique, mais là le curseur reste cette fois bloqué en mode "Aller" une fois que j'ai cliqué droit. - Code:
-
//______________Clic DROIT normal = passe au mode suivant_________________ else if (button == eMouseRight) { mouse.DisableMode(eModeSortir); player.ActiveInventory = null; mouse.SelectNextMode(); } } _________________ L' est si forte à la course qu'elle en sort de la phrase. autruche
|
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Mode "aller" sur un hotspot actif ou inactif Ven 18 Fév 2022 - 16:59 | |
| - Jorkz a écrit:
Mais comme je disais le problème ensuite c'est la gestion de mon clic droit, car là il reste bloqué dans la zone voulue en mode "Sortir"... et c'est à ce niveau que je ne m'en sors plus, je ne sais pas où lui dire de désactiver ce mode si un clic droit est fait. Attention, dans le code que tu viens de poster, le deuxième else ne s'activera pas si on clique avec le bouton droit (car il signifie, "sinon, si le bouton utilisé n'est pas le clic droit..."). Il faut juste, là aussi, basculer le mode "Sortir" vers le mode "Aller", si on utilise le clic droit : - Code:
-
else if (button == eMouseRight) { if (mouse.Mode == eModeSortir) mouse.Mode = eModeAller; //Ajouter cette ligne au code initial player.ActiveInventory = null; mouse.SelectNextMode(); } Le mode de curseur actuel sera donc redéfini sur le mode "Aller", avant de passer au mode de curseur suivant. - Jorkz a écrit:
Et deuxième problème, moins grave cependant mais pas tip top niveau gamedesign, c'est que de la même manière lorsqu'un objet d'inventaire est en curseur il se change lui aussi au niveau du survol... Mais ça je pense pouvoir le régler...
En fait, la fonction IsModeEnabled n'est pas forcément très adaptée, car je crois qu'elle renvoie quasiment toujours true chez toi. En gros, elle vérifie non pas si le mode en question est utilisé, mais plutôt s'il est utilisable. Il convient donc probablement de remplacer tous les "if (mouse.IsModeEnabled(*MODE*))" par "if (mouse.Mode == *MODE*)" comme ici par exemple : - Code:
-
// comportement survol RIEN____________________________________________________
if ((hsurvol == hotspot[0])||(osurvol == null)||(csurvol == null)) { if (mouse.Mode == eModeSortir){ mouse.Mode = eModeAller; } if (mouse.Mode == eModeAller) { mouse.ChangeModeGraphic(eModeAller,1); } if (mouse.Mode == eModeRegarder) { mouse.ChangeModeGraphic(eModeRegarder,3); } if (mouse.Mode == eModeMain) { mouse.ChangeModeGraphic(eModeMain,5); } if (mouse.Mode == eModeParler) { mouse.ChangeModeGraphic(eModeParler,7); } }
// comportement survol SORTIES DE ROOM__________________________________________
if ((hsurvol != hotspot[0])&&(mouse.Mode == eModeAller)) //C'est ici que c'est le plus important dans le cas qui nous intéresse présentement { if(hsurvol.GetProperty("Sortie")== true) { mouse.Mode = eModeSortir; } if((hsurvol.GetProperty("Sortie")== false)||(hsurvol.GetProperty("Choopa")== true)) { mouse.ChangeModeGraphic(eModeAller,1); } } Ça marche chez moi mais j'espère ne rien avoir oublié. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: Re: Mode "aller" sur un hotspot actif ou inactif Ven 18 Fév 2022 - 17:13 | |
| Yes tu assures !! Ça m'a tout l'air de fonctionner nickel chrome !! C'était (encore) une grosse confusion de ma part sur ces histoires de utilisé/utilisable, comme tu disais. J'ai dû par ailleurs tout remplacer plus bas pour le reste. Merci beaucoup !! _________________ L' est si forte à la course qu'elle en sort de la phrase. autruche
|
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Mode "aller" sur un hotspot actif ou inactif Ven 18 Fév 2022 - 17:38 | |
| - Jorkz a écrit:
- C'était (encore) une grosse confusion de ma part sur ces histoires de utilisé/utilisable, comme tu disais.
Oui, je me rappelle avoir fait aussi des confusions là dessus à mes débuts. C'est aussi pour cette raison que le curseur ne passait plus en mode sortir avec cette solution : - Code:
-
//______________Clic DROIT normal = passe au mode suivant_________________ else if (button == eMouseRight) { mouse.DisableMode(eModeSortir); player.ActiveInventory = null; mouse.SelectNextMode(); } } L'appel de la fonction "mouse. DisableMode(eModeSortir)" désactive le mode en question, ce qui fait qu'il ne peut plus être utilisé avant d'être réactivé via "mouse. EnableMode". C'est très rarement une bonne idée d'avoir recours à ces fonctions qui me semblent avoir un rôle assez marginal (ça pourrait éventuellement être utile, par exemple, si dans une room donnée tu voulais empêcher le joueur d'utiliser un des curseurs). Et donc c'est cette propriété précise que vérifie la fonction IsMouseEnabled (qui passe donc de true à false et inversement en faisant appel aux fonctions citées plus haut). _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: Re: Mode "aller" sur un hotspot actif ou inactif Ven 18 Fév 2022 - 18:43 | |
| Très formateur cependant de se confronter à ce genre de trucs... Quand j'attaquerai la carte générale qui mène a telle ou telle room ça me sera assez utile je pense ! _________________ L' est si forte à la course qu'elle en sort de la phrase. autruche
|
|
| |
Contenu sponsorisé
| Sujet: Re: Mode "aller" sur un hotspot actif ou inactif | |
| |
|
| |
| Mode "aller" sur un hotspot actif ou inactif | |
|