Partagez
Aller en bas
PikaMew
PikaMew
Membre

Nombre de messages : 16
Age : 26
Localisation : Derrière toi
Distinction : aucune
Date d'inscription : 16/12/2018
https://www.youtube.com/channel/UCX2pr_YCBRbrYOdeIBTf0_g

Résolu Gestion du nombre de jours du mois

le Dim 16 Déc 2018 - 13:56
Bonjour,

Je m'explique, j'ai réalisé une page d'événements commun pour faire un pseudo-système d'écoulement du temps (à raison d'une seconde toutes les 30 frames). Je n'ai aucun problème pour l'écoulement de l'heure qui fonctionne correctement. Le problème réside dans l'écoulement des mois.

À chaque fois que 24 heures passent, l'événement commun ajoute 1 jour comme convenu (tout en soustrayant 24 de la variable de l'heure évidemment). Le problème est dans les conditions qui suivent :

Code:
◆Commentaire:Problème ici
◆Si:Script:$gameVariables.value(7) === 0||2||4||6||7||9||11;
  ◆Si:Jour du mois > 31
    ◆Modifier une variable:#0006 Jour du mois = 1
    ◆Modifier une variable:#0007 ID Mois += 1
    ◆
  :Fin
  ◆
:Fin
◆Si:Script:$gameVariables.value(7) === 1;
  ◆Si:Jour du mois > 28
    ◆Modifier une variable:#0006 Jour du mois = 1
    ◆Modifier une variable:#0007 ID Mois += 1
    ◆
  :Fin
  ◆
:Fin
◆Si:Script:$gameVariables.value(7) === 3||5||8||10;
  ◆Si:Jour du mois > 30
    ◆Modifier une variable:#0006 Jour du mois = 1
    ◆Modifier une variable:#0007 ID Mois += 1
    ◆
  :Fin
  ◆
:Fin

Pour une raison quelconque, la page d'événements ignore la condition des mois de 31 jours au profit de la condition des mois de 30 jours (faisant passer ces mois 1 jour plus tôt que prévu). J'ai bien séparé les trois conditions et les ai testé séparément ainsi que dans un ordre différent et même avec la condition "Sinon". Cependant, le mois de février (ID 1) comporte bien 28 jours comme prévu.

Du coup, est-ce qu'il y a quelque chose de bête que j'ai loupé ou est-ce qu'il y a un problème plus profond avec cet événement commun ? Je ne sais pas. C'est pour ça que je suis là. Comment je peux résoudre ce problème ?

Pour information, j'utilise RPG Maker MV 1.6.1. et le projet n'a qu'un seul plugin "Community_Basic".

Je vous mets l'intégralité de la page d'événement ci-dessous :

Code:
◆Attendre:30 frames
◆Modifier une variable:#0003 Seconde += 1
◆Boucle
 ◆Si:Seconde ≥ 60
   ◆Modifier une variable:#0002 Minute += 1
   ◆Modifier une variable:#0003 Seconde -= 60
   ◆
 :Sinon
   ◆Interrompre la boucle
   ◆
 :Fin
 ◆
:Répéter ci-dessus
◆Boucle
 ◆Si:Minute ≥ 60
   ◆Modifier une variable:#0001 Heure += 1
   ◆Modifier une variable:#0002 Minute -= 60
   ◆
 :Sinon
   ◆Interrompre la boucle
   ◆
 :Fin
 ◆
:Répéter ci-dessus
◆Boucle
 ◆Si:Heure ≥ 24
   ◆Modifier une variable:#0004 ID Jour += 1
   ◆Modifier une variable:#0006 Jour du mois += 1
   ◆Modifier une variable:#0001 Heure -= 24
   ◆
 :Sinon
   ◆Interrompre la boucle
   ◆
 :Fin
 ◆
:Répéter ci-dessus
◆Placer une étiquette:Check Jour
◆Si:ID Jour = 0
 ◆Modifier une variable:#0005 Jour de la semaine = "Lundi"
 ◆
:Sinon
 ◆Si:ID Jour = 1
   ◆Modifier une variable:#0005 Jour de la semaine = "Mardi"
   ◆
 :Sinon
   ◆Si:ID Jour = 2
     ◆Modifier une variable:#0005 Jour de la semaine = "Mercredi"
     ◆
   :Sinon
     ◆Si:ID Jour = 3
       ◆Modifier une variable:#0005 Jour de la semaine = "Jeudi"
       ◆
     :Sinon
       ◆Si:ID Jour = 4
         ◆Modifier une variable:#0005 Jour de la semaine = "Vendredi"
         ◆
       :Sinon
         ◆Si:ID Jour = 5
           ◆Modifier une variable:#0005 Jour de la semaine = "Samedi"
           ◆
         :Sinon
           ◆Si:ID Jour = 6
             ◆Modifier une variable:#0005 Jour de la semaine = "Dimanche"
             ◆
           :Sinon
             ◆Si:ID Jour ≥ 7
               ◆Modifier une variable:#0004 ID Jour = 0
               ◆Aller à l'étiquette:Check Jour
               ◆
             :Fin
             ◆
           :Fin
           ◆
         :Fin
         ◆
       :Fin
       ◆
     :Fin
     ◆
   :Fin
   ◆
 :Fin
 ◆
:Fin
◆Si:Jour du mois = 0
 ◆Modifier une variable:#0006 Jour du mois = 1
 ◆
:Fin
◆Commentaire:Problème ici
◆Si:Script:$gameVariables.value(7) === 0||2||4||6||7||9||11;
  ◆Si:Jour du mois > 31
    ◆Modifier une variable:#0006 Jour du mois = 1
    ◆Modifier une variable:#0007 ID Mois += 1
    ◆
  :Fin
  ◆
:Fin
◆Si:Script:$gameVariables.value(7) === 1;
  ◆Si:Jour du mois > 28
    ◆Modifier une variable:#0006 Jour du mois = 1
    ◆Modifier une variable:#0007 ID Mois += 1
    ◆
  :Fin
  ◆
:Fin
◆Si:Script:$gameVariables.value(7) === 3||5||8||10;
  ◆Si:Jour du mois > 30
    ◆Modifier une variable:#0006 Jour du mois = 1
    ◆Modifier une variable:#0007 ID Mois += 1
    ◆
  :Fin
  ◆
:Fin
◆Placer une étiquette:Check Mois
◆Si:ID Mois = 0
 ◆Modifier une variable:#0008 Mois = "janvier"
 ◆
:Sinon
 ◆Si:ID Mois = 1
   ◆Modifier une variable:#0008 Mois = "février"
   ◆
 :Sinon
   ◆Si:ID Mois = 2
     ◆Modifier une variable:#0008 Mois = "mars"
     ◆
   :Sinon
     ◆Si:ID Mois = 3
       ◆Modifier une variable:#0008 Mois = "avril"
       ◆
     :Sinon
       ◆Si:ID Mois = 4
         ◆Modifier une variable:#0008 Mois = "mai"
         ◆
       :Sinon
         ◆Si:ID Mois = 5
           ◆Modifier une variable:#0008 Mois = "juin"
           ◆
         :Sinon
           ◆Si:ID Mois = 6
             ◆Modifier une variable:#0008 Mois = "juillet"
             ◆
           :Sinon
             ◆Si:ID Mois = 7
               ◆Modifier une variable:#0008 Mois = "août"
               ◆
             :Sinon
               ◆Si:ID Mois = 8
                 ◆Modifier une variable:#0008 Mois = "septembre"
                 ◆
               :Sinon
                 ◆Si:ID Mois = 9
                   ◆Modifier une variable:#0008 Mois = "octobre"
                   ◆
                 :Sinon
                   ◆Si:ID Mois = 10
                     ◆Modifier une variable:#0008 Mois = "novembre"
                     ◆
                   :Sinon
                     ◆Si:ID Mois = 11
                       ◆Modifier une variable:#0008 Mois = "décembre"
                       ◆
                     :Sinon
                       ◆Si:ID Mois ≥ 12
                         ◆Modifier une variable:#0007 ID Mois = 0
                         ◆Aller à l'étiquette:Check Mois
                         ◆
                       :Fin
                       ◆
                     :Fin
                     ◆
                   :Fin
                   ◆
                 :Fin
                 ◆
               :Fin
               ◆
             :Fin
             ◆
           :Fin
           ◆
         :Fin
         ◆
       :Fin
       ◆
     :Fin
     ◆
   :Fin
   ◆
 :Fin
 ◆
:Fin

Merci d'avance pour votre aide.
PikaMew
PikaMew
Membre

Nombre de messages : 16
Age : 26
Localisation : Derrière toi
Distinction : aucune
Date d'inscription : 16/12/2018
https://www.youtube.com/channel/UCX2pr_YCBRbrYOdeIBTf0_g

Résolu Re: Gestion du nombre de jours du mois

le Dim 16 Déc 2018 - 19:47
Bonjour,

Excusez-moi du double post mais je me dois de mettre à jour à situation.

J'ai continué à chercher de mon coté comment faire marcher ça. On m'a conseillé de passer par le coder en JavaScript en utilisant les switches/cases. J'ai donc mené mes recherches et j'ai traduit la partie de l'événement qui posait problème en JavaScript suivant les conseils (et les tutos sur internet). Un autre problème se posait alors c'est que l'événement "Script"de RPG Maker MV... a une limite de caractère apparemment ? Il ne me reste alors qu'une solution : faire un plugin. Encore une fois, en suivant quelques tutos, je fis donc le plugin en question qui - ENFIN - fait ce que je voulais faire depuis le départ résolvant mon problème.

Le plugin réalisé est le suivant :

Code:
/*:
*
*@plugindesc End of the month
*
*@author PikaMew
*
*@help
*
*checkendmonth
*
*/

(function() {

  var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function(command, args) {
    _Game_Interpreter_pluginCommand.call(this, command, args);
    
    if(command == "checkendmonth") {
      switch($gameVariables.value(7)) {
        case 0:
        case 2:
        case 4:
        case 6:
        case 7:
        case 9:
        case 11:
          if ($gameVariables.value(6) > 31) {
            $gameVariables.setValue(6, 1);
            $gameVariables.setValue(7, $gameVariables.value(7)+1);
          }
          break;
        case 3:
        case 5:
        case 8:
        case 10:
          if ($gameVariables.value(6) > 30) {
            $gameVariables.setValue(6, 1);
            $gameVariables.setValue(7, $gameVariables.value(7)+1);
          }
          break;
        case 1:
          if ($gameVariables.value(6) > 28) {
            $gameVariables.setValue(6, 1);
            $gameVariables.setValue(7, $gameVariables.value(7)+1);
          }
          break;
      }
    }
  };

})();

Pour l'utiliser, il suffit simplement de taper la commande de module "checkendmonth" dans l'événement.

Maintenant, quand bien même mon problème est réglé, je reste très ouvert à toute chose qui pourrait expliquer pourquoi les commandes événementielles n'ont pas fonctionné correctement.
Hermoni
Hermoni
Membre

Nombre de messages : 1019
Localisation : Quelque part entre la cuisine et le clavier.
Distinction : - Hermomo' le Chat. Noir et sarcastique mais chat tout de même é_è [Shamu' :3]
Poisson 2018 [Amal']
Rat de mon zoo sur le thème des rats [Ministre de la Culture]
Date d'inscription : 07/09/2015

Résolu Re: Gestion du nombre de jours du mois

le Dim 16 Déc 2018 - 20:10
Je pourrais pas vérifier moi même vu que c'est sur MV, mais le soucis ne serait pas dans l'écriture de la condition ? (celle pour les mois a 30 et 31 que tu gères avec des "ou").
A part là, je vois pas trop où ça pourrait poser soucis.
PikaMew
PikaMew
Membre

Nombre de messages : 16
Age : 26
Localisation : Derrière toi
Distinction : aucune
Date d'inscription : 16/12/2018
https://www.youtube.com/channel/UCX2pr_YCBRbrYOdeIBTf0_g

Résolu Re: Gestion du nombre de jours du mois

le Dim 16 Déc 2018 - 22:42
Quel genre de problème cette façon décrire le code pourrait-il causer ?
Contenu sponsorisé

Résolu Re: Gestion du nombre de jours du mois

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum