Partagez
Aller en bas
Teñvalijenn
Teñvalijenn
Membre

Nombre de messages : 7
Distinction : aucune
Date d'inscription : 21/07/2015

Demande d'aide pour un script Empty Demande d'aide pour un script

le Lun 10 Aoû 2015 - 15:20
Bonjour à tous,

je viens vers vous pour demander votre aide.

Pour mon projet actuel je souhaite introduire des succès dans le jeu via un script.
J'ai commencé par rechercher sur internet des scripts existants, mais le résultat ne me convenait pas (ou ne fonctionnait pas avec ma version de RPG maker). J'ai donc voulu créer le mien. Le script en lui-même fonctionne mais j'ai un bug d'affichage que je ne parviens pas à résoudre.

Le but de mon script est de présenter au joueur une série d'images sur plusieurs pages (normalement toutes différentes mais je n'ai pas encore les images) qui s'affichent en noir et blanc quand le succès n'est pas déverrouillé (dans mes essais en rouge) et en couleur quand le script est déverrouillé (en bleu pour mes essais). A cela s'ajoute une description du succès lorsque celui-ci est déverrouillé ou "???" quand il ne l'est pas.


Code:
#-------------------------------------------------------------------------------
# Création scène n°1
#-------------------------------------------------------------------------------

class Scene_succes < Scene_Base
  def start
    super
    create_title
    create_variable
    create_image
  end

  def create_title
    @title = Window_Base.new(0, 0, 544, 50)
    @title.draw_text(0,0, 544, 26, "Succes page 1/2")
  end

  def create_image
# contient toutes les images utiliser pour les succes. A terme les 01 seront remplacées par les images des succes non débloqués et les 02 par les images des succès débloqués.
    @image1 = Sprite.new
     if $game_switches[1]
       then @image1.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image1.x = 17
            @image1.y = 68
            @image1.z = 250
    else @image1.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image1.x = 17
      @image1.y = 68
      @image1.z = 250
    end

     @image2 = Sprite.new
     if $game_switches[2]
       then @image2.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image2.x = 152
            @image2.y = 68
            @image2.z = 250
    else @image2.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image2.x = 152
      @image2.y = 68
      @image2.z = 250
    end
  
    @image3 = Sprite.new
     if $game_switches[3]
       then @image3.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image3.x = 287
            @image3.y = 68
            @image3.z = 250
    else @image3.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image3.x = 287
      @image3.y = 68
      @image3.z = 250
    end
    
     @image4 = Sprite.new
     if $game_switches[4]
       then @image4.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image4.x = 422
            @image4.y = 68
            @image4.z = 250
    else @image4.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image4.x = 422
      @image4.y = 68
      @image4.z = 250
    end
    
     @image5 = Sprite.new
     if $game_switches[5]
       then @image5.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image5.x = 17
            @image5.y = 203
            @image5.z = 250
    else @image5.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image5.x = 17
      @image5.y = 203
      @image5.z = 250
    end
    
    @image6 = Sprite.new
     if $game_switches[6]
       then @image6.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image6.x = 152
            @image6.y = 203
            @image6.z = 250
    else @image6.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image6.x = 152
      @image6.y = 203
      @image6.z = 250
    end
  
    @image7 = Sprite.new
     if $game_switches[7]
       then @image7.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image7.x = 287
            @image7.y = 203
            @image7.z = 250
    else @image7.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image7.x = 287
      @image7.y = 203
      @image7.z = 250
    end
    
     @image8 = Sprite.new
     if $game_switches[8]
       then @image8.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image8.x = 422
            @image8.y = 203
            @image8.z = 250
    else @image8.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image8.x = 422
      @image8.y = 203
      @image8.z = 250
    end
    
  end
  
    def create_variable
      @@variable = 1
    end


  
 
  def update
    super
    SceneManager.call(Scene_succes2) if Input.trigger?(:R)
    SceneManager.call(Scene_Map) if Input.trigger?(:B)
    if Input.trigger?(:B)
    Sound.play_cancel
    end
    @@variable += 1 if Input.trigger?(:RIGHT)
    @@variable += 4 if Input.trigger?(:DOWN)
    @@variable -= 1 if Input.trigger?(:LEFT)
    @@variable -= 4 if Input.trigger?(:UP)
        @cursor = Window_Base.new(5, 55, 129, 129 ) if @@variable == 1
      @cursor = Window_Base.new(140, 55, 129, 129 ) if @@variable == 2
      @cursor = Window_Base.new(274, 55, 129, 129 )if @@variable == 3
      @cursor = Window_Base.new(409, 55, 129, 129 )if @@variable == 4
      @cursor = Window_Base.new(5, 191, 129, 129 )if @@variable == 5
      @cursor = Window_Base.new(140, 191, 129, 129 )if @@variable == 6
      @cursor = Window_Base.new(274, 191, 129, 129 )if @@variable == 7
      @cursor = Window_Base.new(409, 191, 129, 129 )if @@variable == 8
      if @@variable > 8
        then @@variable -= 8
      end
      if @@variable < 1
        then @@variable += 1
      end
    
# mise en place de la fenêtre de description

    @description = Window_Base.new(0, 326, 544, 90 )
    if @@variable == 1
      if $game_switches[1]
      then @description.draw_text(0,0, 544, 26, "Description 1")
      else @description.draw_text(0,0, 544, 26, "???")
    end
  end
  
      if @@variable == 2  
        if $game_switches[2]
        then @description.draw_text(0,0, 544, 26, "Description 2")
        else @description.draw_text(0,0, 544, 26, "???")
    end
    end
      
          if @@variable == 3  
        if $game_switches[3]
        then @description.draw_text(0,0, 544, 26, "Description 3")
        else @description.draw_text(0,0, 544, 26, "???")
    end
    end
      
          if @@variable == 4  
        if $game_switches[4]
        then @description.draw_text(0,0, 544, 26, "Description 4")
        else @description.draw_text(0,0, 544, 26, "???")
    end
    end
    
          if @@variable == 5  
        if $game_switches[5]
        then @description.draw_text(0,0, 544, 26, "Description 5")
        else @description.draw_text(0,0, 544, 26, "???")
    end
    end
    
          if @@variable == 6  
        if $game_switches[6]
        then @description.draw_text(0,0, 544, 26, "Description 6")
        else @description.draw_text(0,0, 544, 26, "???")
    end
  end
  
            if @@variable == 6  
        if $game_switches[6]
        then @description.draw_text(0,0, 544, 26, "Description 8")
        else @description.draw_text(0,0, 544, 26, "???")
    end
  end
  
            if @@variable == 8
        if $game_switches[8]
        then @description.draw_text(0,0, 544, 26, "Description 8")
        else @description.draw_text(0,0, 544, 26, "???")
    end
  end
  
    end
    
end

#-------------------------------------------------------------------------------
# Création scène n°2
#-------------------------------------------------------------------------------

class Scene_succes2 < Scene_Base
  def start
    super
    create_title
    create_variable
    create_image
  end

  def create_title
    @title = Window_Base.new(0, 0, 544, 50)
    @title.draw_text(0,0, 544, 26, "Succes page 2/2")
  end

  def create_image
    @image1 = Sprite.new
     if $game_switches[9]
       then @image1.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image1.x = 17
            @image1.y = 68
            @image1.z = 250
    else @image1.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image1.x = 17
      @image1.y = 68
      @image1.z = 250
    end

     @image2 = Sprite.new
     if $game_switches[10]
       then @image2.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image2.x = 152
            @image2.y = 68
            @image2.z = 250
    else @image2.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image2.x = 152
      @image2.y = 68
      @image2.z = 250
    end
  
    @image3 = Sprite.new
     if $game_switches[11]
       then @image3.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image3.x = 287
            @image3.y = 68
            @image3.z = 250
    else @image3.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image3.x = 287
      @image3.y = 68
      @image3.z = 250
    end
    
     @image4 = Sprite.new
     if $game_switches[12]
       then @image4.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image4.x = 422
            @image4.y = 68
            @image4.z = 250
    else @image4.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image4.x = 422
      @image4.y = 68
      @image4.z = 250
    end
    
     @image5 = Sprite.new
     if $game_switches[13]
       then @image5.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image5.x = 17
            @image5.y = 203
            @image5.z = 250
    else @image5.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image5.x = 17
      @image5.y = 203
      @image5.z = 250
    end
    
    @image6 = Sprite.new
     if $game_switches[14]
       then @image6.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image6.x = 152
            @image6.y = 203
            @image6.z = 250
    else @image6.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image6.x = 152
      @image6.y = 203
      @image6.z = 250
    end
  
    @image7 = Sprite.new
     if $game_switches[15]
       then @image7.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image7.x = 287
            @image7.y = 203
            @image7.z = 250
    else @image7.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image7.x = 287
      @image7.y = 203
      @image7.z = 250
    end
    
     @image8 = Sprite.new
     if $game_switches[16]
       then @image8.bitmap = Bitmap.new("Graphics/Pictures/02")
           @image8.x = 422
            @image8.y = 203
            @image8.z = 250
    else @image8.bitmap = Bitmap.new("Graphics/Pictures/01")
      @image8.x = 422
      @image8.y = 203
      @image8.z = 250
    end
    
  end
  
    def create_variable
      @@variable = 1
    end

  def update
    super
    SceneManager.call(Scene_succes) if Input.trigger?(:L)
    SceneManager.call(Scene_Map) if Input.trigger?(:B)
    if Input.trigger?(:B)
    Sound.play_cancel
    end
    @@variable += 1 if Input.trigger?(:RIGHT)
    @@variable += 4 if Input.trigger?(:DOWN)
    @@variable -= 1 if Input.trigger?(:LEFT)
    @@variable -= 4 if Input.trigger?(:UP)
      @cursor = Window_Base.new(5, 55, 129, 129 ) if @@variable == 1
      @cursor = Window_Base.new(140, 55, 129, 129 ) if @@variable == 2
      @cursor = Window_Base.new(274, 55, 129, 129 )if @@variable == 3
      @cursor = Window_Base.new(409, 55, 129, 129 )if @@variable == 4
      @cursor = Window_Base.new(5, 191, 129, 129 )if @@variable == 5
      @cursor = Window_Base.new(140, 191, 129, 129 )if @@variable == 6
      @cursor = Window_Base.new(274, 191, 129, 129 )if @@variable == 7
      @cursor = Window_Base.new(409, 191, 129, 129 )if @@variable == 8
      if @@variable > 8
        then @@variable -= 8
      end
      if @@variable < 1
        then @@variable += 1
      end
    
# mise en place de la fenêtre de description

    @description = Window_Base.new(0, 326, 544, 90 )
    if @@variable == 1
      if $game_switches[9]
      then @description.draw_text(0,0, 544, 26, "Description 9")
      else @description.draw_text(0,0, 544, 26, "???")
    end
  end
  
      if @@variable == 2  
        if $game_switches[10]
        then @description.draw_text(0,0, 544, 26, "Description 10")
        else @description.draw_text(0,0, 544, 26, "???")
    end
    end
      
          if @@variable == 3  
        if $game_switches[11]
        then @description.draw_text(0,0, 544, 26, "Description 11")
        else @description.draw_text(0,0, 544, 26, "???")
    end
    end
      
          if @@variable == 4  
        if $game_switches[12]
        then @description.draw_text(0,0, 544, 26, "Description 12")
        else @description.draw_text(0,0, 544, 26, "???")
    end
    end
    
          if @@variable == 5  
        if $game_switches[13]
        then @description.draw_text(0,0, 544, 26, "Description 13")
        else @description.draw_text(0,0, 544, 26, "???")
    end
    end
    
          if @@variable == 6  
        if $game_switches[14]
        then @description.draw_text(0,0, 544, 26, "Description 14")
        else @description.draw_text(0,0, 544, 26, "???")
    end
  end
  
            if @@variable == 6  
        if $game_switches[15]
        then @description.draw_text(0,0, 544, 26, "Description 15")
        else @description.draw_text(0,0, 544, 26, "???")
    end
  end
  
            if @@variable == 8
        if $game_switches[16]
        then @description.draw_text(0,0, 544, 26, "Description 16")
        else @description.draw_text(0,0, 544, 26, "???")
    end
  end
  
    end
    
end

Mon problème vient du "curseur" qui se déplace d'image en image :
Au lieu de se déplacer d'image en image, celui-ci se duplique et apparait à la fois sous l'image sélectionnée et sous celle où il était précédemment.

Demande d'aide pour un script Succes10

Demande d'aide pour un script Succes11

Demande d'aide pour un script Succes12


J'ai testé différentes solutions mais sans succès et j'aurais donc besoin de votre avis.
Je vous remercie par avance.
Dany
Dany
Membre

Nombre de messages : 773
Age : 23
Distinction : aucune
Date d'inscription : 16/11/2010
http://gamers-studio.forumofficiel.fr/

Demande d'aide pour un script Empty Re: Demande d'aide pour un script

le Lun 10 Aoû 2015 - 18:20
c'est dans le def update que tu dois regarder:
Code:
  def update
    super
    SceneManager.call(Scene_succes2) if Input.trigger?(:R)
    SceneManager.call(Scene_Map) if Input.trigger?(:B)
    if Input.trigger?(:B)
    Sound.play_cancel
    end
    @@variable += 1 if Input.trigger?(:RIGHT)
    @@variable += 4 if Input.trigger?(:DOWN)
    @@variable -= 1 if Input.trigger?(:LEFT)
    @@variable -= 4 if Input.trigger?(:UP)
        @cursor = Window_Base.new(5, 55, 129, 129 ) if @@variable == 1
      @cursor = Window_Base.new(140, 55, 129, 129 ) if @@variable == 2
      @cursor = Window_Base.new(274, 55, 129, 129 )if @@variable == 3
      @cursor = Window_Base.new(409, 55, 129, 129 )if @@variable == 4
      @cursor = Window_Base.new(5, 191, 129, 129 )if @@variable == 5
      @cursor = Window_Base.new(140, 191, 129, 129 )if @@variable == 6
      @cursor = Window_Base.new(274, 191, 129, 129 )if @@variable == 7
      @cursor = Window_Base.new(409, 191, 129, 129 )if @@variable == 8
      if @@variable > 8
        then @@variable -= 8
      end
      if @@variable < 1
        then @@variable += 1
      end
    
# mise en place de la fenêtre de description

    @description = Window_Base.new(0, 326, 544, 90 )
    if @@variable == 1
      if $game_switches[1]
      then @description.draw_text(0,0, 544, 26, "Description 1")
      else @description.draw_text(0,0, 544, 26, "???")
    end
  end
Tu dessiner a la possition que tu veux, par variable, donc si variable == 1 afficher celui-ci, mais tu lui dit pas de supprimer l'ancien position.
Créer une fonction comme celle-ci:
Code:
def create_all_windows_hide
#Création des fenêtres, pour la création des cursors.
    @cursor1 = Window_Base.new(5, 55, 129, 129 ) if @@variable == 1
    @cursor2 = Window_Base.new(140, 55, 129, 129 ) if @@variable == 2
    @cursor3 = Window_Base.new(274, 55, 129, 129 )if @@variable == 3
    @cursor4 = Window_Base.new(409, 55, 129, 129 )if @@variable == 4
    @cursor5 = Window_Base.new(5, 191, 129, 129 )if @@variable == 5
    @cursor6 = Window_Base.new(140, 191, 129, 129 )if @@variable == 6
    @cursor7 = Window_Base.new(274, 191, 129, 129 )if @@variable == 7
    @cursor8 = Window_Base.new(409, 191, 129, 129 )if @@variable == 8
#Cache toutes les fenêtres.
   @cursor1.hide
   @cursor2.hide
   @cursor3.hide
   @cursor4.hide
   @cursor5.hide
   @cursor6.hide
   @cursor7.hide
   @cursor8.hide
end

Une fois ceci fait, tu l'appel dans le def initialize, et dans l'update.
Ensuite du créer une autre def, avec les conditions, pour afficher les Windows, et tu l'appel dans update après le def d'avant.
Teñvalijenn
Teñvalijenn
Membre

Nombre de messages : 7
Distinction : aucune
Date d'inscription : 21/07/2015

Demande d'aide pour un script Empty Re: Demande d'aide pour un script

le Lun 10 Aoû 2015 - 22:37
Merci beaucoup, je vais tester cette solution.
Dany
Dany
Membre

Nombre de messages : 773
Age : 23
Distinction : aucune
Date d'inscription : 16/11/2010
http://gamers-studio.forumofficiel.fr/

Demande d'aide pour un script Empty Re: Demande d'aide pour un script

le Lun 10 Aoû 2015 - 23:19
Dit-moi, si cela fonctionne ou si tu n'arrive pas, je te modifierais demain le script.
Teñvalijenn
Teñvalijenn
Membre

Nombre de messages : 7
Distinction : aucune
Date d'inscription : 21/07/2015

Demande d'aide pour un script Empty Re: Demande d'aide pour un script

le Lun 10 Aoû 2015 - 23:46
Finalement, ça ne fonctionne pas, j'obtiens le message d'erreur suivant :

"undefined method `hide' for nil:NilClass"
Dany
Dany
Membre

Nombre de messages : 773
Age : 23
Distinction : aucune
Date d'inscription : 16/11/2010
http://gamers-studio.forumofficiel.fr/

Demande d'aide pour un script Empty Re: Demande d'aide pour un script

le Mar 11 Aoû 2015 - 0:01
Essaye avec openness a la place de hide, tu met openness = 0, qui permet de rendre invisible, car oui, la class Window n'a pas de fonction hide.
Je me suis tromper désoler.
Teñvalijenn
Teñvalijenn
Membre

Nombre de messages : 7
Distinction : aucune
Date d'inscription : 21/07/2015

Demande d'aide pour un script Empty Re: Demande d'aide pour un script

le Ven 14 Aoû 2015 - 22:25
Désolé pour le temps de réponse, je n'ai pas eu accès à internet ces derniers jours.
Après essais je rencontre le même message d'erreur avec openness :

undefined method `openness=' for nil:NilClass

mais j'ai finalement réussi à trouver une solution en appelant tous mes curseurs sans conditions :

Code:
   def create_all_windows_hide
#Création des fenêtres, pour la création des cursors.

@cursor1 = Window_Base.new(5, 55, 129, 129 )
    @cursor2 = Window_Base.new(140, 55, 129, 129 )
    @cursor3 = Window_Base.new(274, 55, 129, 129 )
    @cursor4 = Window_Base.new(409, 55, 129, 129 )
    @cursor5 = Window_Base.new(5, 191, 129, 129 )
    @cursor6 = Window_Base.new(140, 191, 129, 129 )
    @cursor7 = Window_Base.new(274, 191, 129, 129 )
    @cursor8 = Window_Base.new(409, 191, 129, 129 )

end

puis en mettant deux situations dans l'update :

Code:
  @cursor1.show if @@variable == 1
   @cursor2.show if @@variable == 2
   @cursor3.show if @@variable == 3
   @cursor4.show if @@variable == 4
   @cursor5.show if @@variable == 5
   @cursor6.show if @@variable == 6
   @cursor7.show if @@variable == 7
   @cursor8.show if @@variable == 8
    @cursor1.hide if @@variable != 1
   @cursor2.hide if @@variable != 2
   @cursor3.hide if @@variable != 3
   @cursor4.hide if @@variable != 4
   @cursor5.hide if @@variable != 5
   @cursor6.hide if @@variable != 6
   @cursor7.hide if @@variable != 7
   @cursor8.hide if @@variable != 8

et là, les fenêtres disparaissent et apparaissent au bon moment.

En tout cas je te remercie beaucoup pour ton aide
Dany
Dany
Membre

Nombre de messages : 773
Age : 23
Distinction : aucune
Date d'inscription : 16/11/2010
http://gamers-studio.forumofficiel.fr/

Demande d'aide pour un script Empty Re: Demande d'aide pour un script

le Ven 14 Aoû 2015 - 22:40
De rien, si tu a besoin d'aide n'hésite pas! Wink
La variable fonctionne bien, mais je trouve pas propre, mais tant que ça fonctionne! Smile
Teñvalijenn
Teñvalijenn
Membre

Nombre de messages : 7
Distinction : aucune
Date d'inscription : 21/07/2015

Demande d'aide pour un script Empty Re: Demande d'aide pour un script

le Sam 15 Aoû 2015 - 14:19
Perso je ne trouve pas ça propre non plus mais je ne suis pas encore assez avancée en rgss3 pour faire autrement. Je reprendrais sans doute ce script plus tard quand j'aurais gagné de l'expérience.
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum