Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
Le deal à ne pas rater :
Cdiscount : -30€ dès 300€ d’achat sur une sélection Apple
Voir le deal

 

 [résolu]Action personnage autre room

Aller en bas 
2 participants
AuteurMessage
adauca
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
adauca


Nombre de messages : 151

Age : 41

Localisation : Strasbourg

Date d'inscription : 10/02/2014


[résolu]Action personnage autre room Empty
MessageSujet: [résolu]Action personnage autre room   [résolu]Action personnage autre room EmptyMer 3 Fév 2016 - 23:19

Hello,

je bloque depuis quelques jours sur une action que mon personnage doit réaliser.

Il se trouve dans une pièce, discute avec un personnage de la pièce qui en résulte par le fait que mon perso principal pose une feuille(iDevis) sur un bureau, en face du personnage de la pièce. Il l'a dans son inventaire à la base et peut aussi donner directement la feuille(iDevis) au personnage.
J'aimerai qu'une fois cet objet sortie de mon inventaire et posé sur le bureau, lorsque je sors de la pièce il marche un peu se retourne et sort une phrase spécifique suivi d'une animation(réglée dans une autre room) et le jeu quitte.

Je ne sais pas si ma démarche est bonne et je sais que mon if n'est pas correct.

Voilà où j'en suis:
Code:
function room_Load()
{
...........
if (cNico.ChangeRoom(4) && cNico.LoseInventory(iDevis)){
 cNico.LockViewAligned(1, 3, eAlignCentre);
 cNico.Walk(1470, 1000, eBlock, eAnywhere);
 cNico.LockViewAligned(4, 0, eAlignCentre);
 cNico.Say("Pfiouuu...");
 cNico.Say("J'en peux plus là!");
 cNico.Say("La journée risque d'être longue!");
 cNico.Say("J'ai besoin d'une clope.");
 cNico.Say("Il faut que je trouve quelqu'un...");
 cNico.Say("...qui m'en file une."); Wait(20);
 cNico.Say("Où plusieurs..."); Wait(20);
 PlayVideo("chapitre_1.avi", eVideoSkipEscKey, 10);
 cNico.ChangeRoom(4, 1400, 1050);
 QuitGame(0);
}
}

_________________
Une agence de publicité, c'est 85 % de confusion et 15 % de commission.


Dernière édition par adauca le Sam 6 Fév 2016 - 0:00, édité 1 fois
Revenir en haut Aller en bas
http://www.mad-day.fr
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


[résolu]Action personnage autre room Empty
MessageSujet: Re: [résolu]Action personnage autre room   [résolu]Action personnage autre room EmptyJeu 4 Fév 2016 - 1:13

Salut,

Alors je ne suis pas certain de comprendre ce que tu veux faire, mais je peux t'expliquer ce que fait le code que tu as collé.

Quand l'exécution arrive à ligne
Code:
if (cNico.ChangeRoom(4) && cNico.LoseInventory(iDevis)){
, le jeu va essayer de vérifier que cNico.ChangeRoom(4) et cNico.LoseInventory(iDevis) valent true. Or ChangeRoom et LoseInventory sont des commandes, c'est-à-dire qu'elles accomplissent des actions. En l'occurrence, cNico.ChangeRoom(4) a pour effet de transporter cNico dans la pièce numéro 4 et cNico.LoseInventory(iDevis) a pour effet de retirer l'objet iDevis à cNico. Autrement dit, pour vérifier si la condition de ton if est remplie, le jeu va déplacer cNico dans la pièce 4 puis lui retirer l'objet iDevis (s'il l'avait auparavant). Je ne connais pas la valeur que chacune de ces commandes retourne après avoir été exécutée, mais je ne suis pas sûr que ce soit true. Et je suis quasiment certain que de toute façon tu n'avais pas l'intention de faire subir toutes ces mésaventures à cNico avec ton if.
Peut-être que ce que tu voulais plutôt faire, c'est vérifier que cNico a les propriétés d'être actuellement dans la pièce numéro 4 et de ne pas être en possession de l'objet iDevis. Et pour vérifier ces propriétés, eh bien il faut vérifier... des propriétés ! La première des propriétés que tu veux vérifier (je suppose) c'est le numéro de la pièce dans laquelle se trouve le personnage, cette propriété s'appelle astucieusement Room. L'autre propriété c'est celle de ne pas avoir l'objet iDevis. Là les choses sont un peu plus complexes car c'est en fait une négation de propriété que tu cherches à vérifier : la négation de la propriété d'avoir l'objet iDevis. Seulement AGS ne propose pas d'emblée de propriété simple "possède l'objet iDevis" pour la bonne raison que chaque projet peut définir des objets différents. Il va donc falloir passer par une fonction qui peut exprimer la relation d'un personnage avec n'importe quel objet, et cette fonction c'est HasInventory. En fin de compte, ton if ressemblera à ça :
Code:
if (cNico.Room == 4 && cNico.HasInventory(iDevis) == false){

Ensuite tout me semble aller plutôt bien dans ton code, jusqu'à cette ligne :  cNico.LockViewAligned(4, 0, eAlignCentre);. Est-ce que tu cherches simplement à redonner une animation normale à ton personnage, c'est-à-dire celle qu'il avait avant l'autre LockViewAligned 2 lignes plus haut ? Si c'est le cas, utilise plutôt la commande UnlockView, qui est justement faite pour ça et qui est de toute façon attendue après la commande LockView(Aligned).

Je ne suis pas certain de comprendre l'intérêt de la présence de cette ligne :  cNico.ChangeRoom(4, 1400, 1050);. Est-ce que tu ne vérifiais pas, juste avant, que cNico se trouve dans la pièce 4 ? S'il se trouve déjà dans la pièce 4, pourquoi essayer de l'y transporter à nouveau ?
De plus, tu quittes le jeu juste après (QuitGame(0);) donc le joueur n'aura pas le temps de remarquer ce changement de pièce.

Dernier commentaire, ton code semble se trouver dans la fonction room_Load. Si c'est le cas, quel besoin as-tu de vérifier la pièce dans laquelle se trouve cNico ? Ce personne n'est-il pas le personnage joueur ?


Voilà, j'espère t'avoir éclairé sur le fonctionnement du code que tu as rapporté.

PS : "ou plusieurs" clin d'oeil

_________________
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 !
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
adauca
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
adauca


Nombre de messages : 151

Age : 41

Localisation : Strasbourg

Date d'inscription : 10/02/2014


[résolu]Action personnage autre room Empty
MessageSujet: Re: [résolu]Action personnage autre room   [résolu]Action personnage autre room EmptyVen 5 Fév 2016 - 23:02

alors merci pour ce développement de lignes de codes.
Pour ce qui est de la commande
Code:
cNico.LockViewAligned(4, 0, eAlignCentre)
elle est là pour le forcer à être en face de l'écran comme s'il regardait le joueur pour lui parler. Si je ne met pas cette commande il parlera de la vue par laquelle il arrive de l'autre pièce et en l'occurrence il sera de dos.

Par contre il est vrai que la commande
Code:
 cNico.ChangeRoom(4, 1400, 1050);
ne sert à rien.

Pour ce qui est de
Code:
if (cNico.Room == 4 && cNico.HasInventory(iDevis) == false){
le problème c'est que lorsque je débute le jeu, je n'ai pas encore le oDevis et je commence par la pièce 4 donc il va tout de suite me démarrer ma phrase et quitter le jeu. Je ne veux qu'il fasse cela que lorsque mon personnage pose ce devis sur le bureau dans la pièce 5 et que lorsqu'il revient dans la pièce 4 le code démarre...

_________________
Une agence de publicité, c'est 85 % de confusion et 15 % de commission.
Revenir en haut Aller en bas
http://www.mad-day.fr
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


[résolu]Action personnage autre room Empty
MessageSujet: Re: [résolu]Action personnage autre room   [résolu]Action personnage autre room EmptyVen 5 Fév 2016 - 23:35

adauca a écrit:
Pour ce qui est de la commande
Code:
cNico.LockViewAligned(4, 0, eAlignCentre)
elle est là pour le forcer à être en face de l'écran comme s'il regardait le joueur pour lui parler. Si je ne met pas cette commande il parlera de la vue par laquelle il arrive de l'autre pièce et en l'occurrence il sera de dos.
Si ce que tu veux faire, c'est contrôler la direction dans laquelle regarde le personnage, utilise plutôt la commande FaceDirection, qui existe nativement dans AGS 3.4 et que tu peux facilement coder toi-même sinon. Et je répète, toute commande LockView ou LockViewAligned devrait être suivie de UnlockView une fois que tu as fini d'animer le personnage clin d'oeil

adauca a écrit:
Pour ce qui est de
Code:
if (cNico.Room == 4 && cNico.HasInventory(iDevis) == false){
le problème c'est que lorsque je débute le jeu, je n'ai pas encore le oDevis et je commence par la pièce 4 donc il va tout de suite me démarrer ma phrase et quitter le jeu. Je ne veux qu'il fasse cela que lorsque mon personnage pose ce devis sur le bureau dans la pièce 5 et que lorsqu'il revient dans la pièce 4 le code démarre...
Alors je ne suis pas sûr de ce que tu veux faire. C'est que lorsque le personnage arrive dans la pièce en question, qu'il avait eu l'objet iDevis auparavant puis qu'il l'a perdu entre-temps, dans ces conditions seulement le monologue puis la fin du jeu devraient s'enclencher ?
Si c'est le cas il va falloir ruser un peu, car il n'y a pas de façon simple d'exprimer ça sous AGS. Il faut faire comme je viens de le formuler, c'est-à-dire vérifier d'une part si le personnage a été en possession de l'objet, puis d'autre part qu'il ne possède pas l'objet actuellement. Ça veut dire que tu vas devoir créer une variable globale nommée devisDonne (par exemple, mais tu la nommes à ta guise hein. Enfin, pas littéralement "à ta guise". Bref tu me comprends) et tu donnes la valeur false à cette variable en début de jeu. Puis au moment où tu donnes l'objet iDevis à cNico, tu en profites aussi pour redéfinir ta variable à la valeur true. Comme ça tu peux réécrire ton if comme ça :
Code:
if (cNico.Room == 4 && devisDonne == true && cNico.HasInventory(iDevis) == false){

_________________
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 !
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
adauca
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
adauca


Nombre de messages : 151

Age : 41

Localisation : Strasbourg

Date d'inscription : 10/02/2014


[résolu]Action personnage autre room Empty
MessageSujet: Re: [résolu]Action personnage autre room   [résolu]Action personnage autre room EmptyVen 5 Fév 2016 - 23:59

aaaah ces fameuses "global variables"... lol
J'en ai fait quelques unes déjà dans le jeu et j'y avais pensé, mais j’espérais pouvoir m'en passer sur ce coup là.
Bon du coup bah c'est réglé.

Merci, une fois de plus Kitai! En remerciement à la fin de mon jeu je garderai une ligne rien que pour toi lol

_________________
Une agence de publicité, c'est 85 % de confusion et 15 % de commission.
Revenir en haut Aller en bas
http://www.mad-day.fr
Contenu sponsorisé





[résolu]Action personnage autre room Empty
MessageSujet: Re: [résolu]Action personnage autre room   [résolu]Action personnage autre room Empty

Revenir en haut Aller en bas
 
[résolu]Action personnage autre room
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Une room qui change radicalement de décor après une action
» comment changer de "Room" sans personnage ?
» une action pas si simple [Résolu]
» Novice : personnage dans room + animation d'attente...
» [Résolu] Déclencher une action qui active un hotspot

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: