Partagez
Aller en bas
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Petite modification de script

le Sam 30 Jan 2016 - 14:57
Coucou, j'aurais besoin d'une petite modification de script. J'utilise un système pour upgrader mes équipements avec du pex classique et je possède une interface pour vérifier le level et les bonus supplémentaires de mes équipements.

C'est cette interface que je veux légèrement modifier. Je vous mets le script pour commencer :

Code:
#Modif class Scene_Equip
class Scene_Equip < Scene_MenuBase
  
  #Modification de l'update
  alias update_interface update
  def update
    update_interface
    if Input.trigger?(:A)
      return if !@item_window.active && !@slot_window.active && @status_window.menu == 0
      Sound.play_cursor
      switch_info
    elsif Input.trigger?(:UP) && @status_window.menu == 1
      Sound.play_cursor
      @status_window.ligne_actuel -= 1
      @status_window.refresh(@status_window.item_actuel)
    elsif Input.trigger?(:DOWN) && @status_window.menu == 1
      Sound.play_cursor
      @status_window.ligne_actuel += 1
      @status_window.refresh(@status_window.item_actuel)
    elsif Input.trigger?(:B) && @status_window.menu == 1
      Sound.play_cursor
      switch_info
    end
  end
  
  #Switch vers le menu info
  def switch_info
    if @status_window.menu == 1
      @status_window.menu = 0
      @status_window.ligne_actuel = 0
      @item_window.activate if @item_window.visible
      @slot_window.activate if @slot_window.visible
      item = nil
    else
      @status_window.menu = 1
      if @item_window.visible
        @item_window.deactivate
        item = @item_window.item
      elsif @slot_window.visible
        @slot_window.deactivate
        item = @actor.equips[@slot_window.index]
      end
    end
    @status_window.refresh(item)
  end
  
end
#Modif Window_EquipStatus
class Window_EquipStatus < Window_Base
  
  attr_accessor :menu #Ajout de la variable menu
  attr_reader :ligne_actuel #Ajout de la variable ligne actuel
  
  #Modification Initialisation
  alias initialize_interface initialize
  def initialize(*args)
    @menu = 0
    @ligne_actuel = 0
    initialize_interface(*args)
  end
  
  #Modification de la ligne actuel
  def ligne_actuel=(value)
    @ligne_actuel = [0,[value,@max_ligne-8].min].max
  end
  
  #Modifiication du refresh
  alias refresh_interface refresh
  def refresh(item = nil)
    if @menu == 0
      refresh_interface
    else
      contents.clear
      draw_interface(item)
    end
  end
  
  #Récuperation de l'item_actuel
  def item_actuel
    return @item
  end
  
  #Creation de la fenetre d'info
  def draw_interface(item)
    if item == nil
      draw_text_ex(0, 0, "")
      @max_ligne = 0
      @item = nil
    else
      @max_ligne = 0
      @item = item
#~       draw_icon(item.icon_index , 0, -@ligne_actuel*24)
#~       contents.font.color = item.rarity_colour
#~       contents.draw_text(24, -88-@ligne_actuel*24, contents.width, contents.height, item.name)
      contents.font.color = system_color
      contents.draw_text(0, -88-@ligne_actuel*24, contents.width, contents.height, "Niveau :")
      contents.font.color = normal_color
      contents.draw_text(0, -64-@ligne_actuel*24, contents.width, contents.height, item.level.to_s + " / " + item.max_level.to_s)
      contents.font.color = system_color
      contents.draw_text(0, -40-@ligne_actuel*24, contents.width, contents.height, "Expérience :")
      contents.font.color = normal_color
      contents.draw_text(0, -16-@ligne_actuel*24, contents.width, contents.height, item.exp.to_s)
      contents.font.color = normal_color
      contents.draw_text(0, 8-@ligne_actuel*24, contents.width, contents.height, item.exp_to_level.to_s)
      contents.font.color = system_color
      contents.draw_text(0, 32-@ligne_actuel*24, contents.width, contents.height, "Prochains bonus :")
      @max_ligne = 6
      j = 0
      for i in 0..7
        if item.instance_mult_lvl_bonus(i) != 1 || item.instance_static_lvl_bonus(i) != 0
          next_value = item.params[i]*item.instance_mult_lvl_bonus(i)+item.instance_static_lvl_bonus(i)
          contents.font.color = normal_color
          contents.draw_text(0 , 56+j*48-@ligne_actuel*24, contents.width, contents.height, Vocab.param(i))
          contents.font.color = normal_color
          contents.draw_text(0 , 80+j*48-@ligne_actuel*24, contents.width, contents.height, item.params[i].to_s+" passe à "+next_value.floor.to_s)
          j += 1
          @max_ligne += 2
        end
      end
    end
  end
  
end

Edit - Je vous mets la démo : http://www.mediafire.com/download/kayeps07khf830u/Ace+menu2.exe

Quand je navigue dans mon menu equipement, cela donne ce que vous voyez sur la Capture 1. Quand j'appuie sur Shift, la fenêtre de droite change et on voit l'interface comme sur la Capture 2. Première chose : est-ce qu'il serait possible de créer une petite flèche pour montrer que le déroulement est possible lorsque le texte des bonus dépasse de la fenêtre ? Actuellement, on peut défiler en appuyant sur les touches Haut et Bas mais on voit une partie du texte et aucune petite flèche.

Ensuite, mon autre souci se trouve lorsque je vais sur la commande Retirer (Capture 3). Si j'appuie sur Shift, j'obtiens mon interface avec rien dedans (Capture 4). Serait-il possible de bloquer l'accès à l'interface quand je suis sur Retirer ? Qu'on ne puisse pas y accéder et qu'on n'entende aucun bruit de validation ou d'erreur.

Capture 1 :



Capture 2 :



Capture 3 :



Capture 4 :



Dernière édition par Nérylis le Mar 1 Mar 2016 - 15:41, édité 4 fois
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petite modification de script

le Ven 5 Fév 2016 - 18:23
Le problème du Retirer a été corrigé. Il reste le problème du défilement si quelqu'un sait faire. Wink

Le script mis à jour :

Code:
#Modif class Scene_Equip
class Scene_Equip < Scene_MenuBase
  
  #Modification de l'update
  alias update_interface update
  def update
    update_interface
    if Input.trigger?(:A)
      return if !@item_window.active && !@slot_window.active && @status_window.menu == 0
      if @item_window.item != nil && !@slot_window.active && @item_window.visible
        Sound.play_cursor
        switch_info
      end
      if @slot_window.visible && @slot_window.item != nil
        Sound.play_cursor
        switch_info
      end
    elsif Input.trigger?(:UP) && @status_window.menu == 1
      Sound.play_cursor
      @status_window.ligne_actuel -= 1
      @status_window.refresh(@status_window.item_actuel)
    elsif Input.trigger?(:DOWN) && @status_window.menu == 1
      Sound.play_cursor
      @status_window.ligne_actuel += 1
      @status_window.refresh(@status_window.item_actuel)
    elsif Input.trigger?(:B) && @status_window.menu == 1
      Sound.play_cursor
      switch_info
    end
  end
  
  #Switch vers le menu info
  def switch_info
    if @status_window.menu == 1
      @status_window.menu = 0
      @status_window.ligne_actuel = 0
      @item_window.activate if @item_window.visible
      @slot_window.activate if @slot_window.visible
      item = nil
    else
      @status_window.menu = 1
      if @item_window.visible
        @item_window.deactivate
        item = @item_window.item
      elsif @slot_window.visible
        @slot_window.deactivate
        item = @actor.equips[@slot_window.index]
      end
    end
    @status_window.refresh(item)
  end
  
end
#Modif Window_EquipStatus
class Window_EquipStatus < Window_Base
  
  attr_accessor :menu #Ajout de la variable menu
  attr_reader :ligne_actuel #Ajout de la variable ligne actuel
  
  #Modification Initialisation
  alias initialize_interface initialize
  def initialize(*args)
    @menu = 0
    @ligne_actuel = 0
    initialize_interface(*args)
  end
  
  #Modification de la ligne actuel
  def ligne_actuel=(value)
    @ligne_actuel = [0,[value,@max_ligne-8].min].max
  end
  
  #Modifiication du refresh
  alias refresh_interface refresh
  def refresh(item = nil)
    if @menu == 0
      refresh_interface
    else
      contents.clear
      draw_interface(item)
    end
  end
  
  #Récuperation de l'item_actuel
  def item_actuel
    return @item
  end
  
  #Creation de la fenetre d'info
  def draw_interface(item)
    if item == nil
      draw_text_ex(0, 0, "")
      @max_ligne = 0
      @item = nil
    else
      @max_ligne = 0
      @item = item
#~       draw_icon(item.icon_index , 0, -@ligne_actuel*24)
#~       contents.font.color = item.rarity_colour
#~       contents.draw_text(24, -88-@ligne_actuel*24, contents.width, contents.height, item.name)
      contents.font.color = system_color
      contents.draw_text(0, -88-@ligne_actuel*24, contents.width, contents.height, "Niveau :")
      contents.font.color = normal_color
      contents.draw_text(0, -64-@ligne_actuel*24, contents.width, contents.height, item.level.to_s + " / " + item.max_level.to_s)
      contents.font.color = system_color
      contents.draw_text(0, -40-@ligne_actuel*24, contents.width, contents.height, "Expérience :")
      contents.font.color = normal_color
      contents.draw_text(0, -16-@ligne_actuel*24, contents.width, contents.height, item.exp.to_s)
      contents.font.color = normal_color
      contents.draw_text(0, 8-@ligne_actuel*24, contents.width, contents.height, item.exp_to_level.to_s)
      contents.font.color = system_color
      contents.draw_text(0, 32-@ligne_actuel*24, contents.width, contents.height, "Prochains bonus :")
      @max_ligne = 6
      j = 0
      for i in 0..7
        if item.instance_mult_lvl_bonus(i) != 1 || item.instance_static_lvl_bonus(i) != 0
          next_value = item.params[i]*item.instance_mult_lvl_bonus(i)+item.instance_static_lvl_bonus(i)
          contents.font.color = normal_color
          contents.draw_text(0 , 56+j*48-@ligne_actuel*24, contents.width, contents.height, Vocab.param(i))
          contents.font.color = normal_color
          contents.draw_text(0 , 80+j*48-@ligne_actuel*24, contents.width, contents.height, item.params[i].to_s+" passe à "+next_value.floor.to_s)
          j += 1
          @max_ligne += 2
        end
      end
    end
  end
  
end
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petite modification de script

le Ven 12 Fév 2016 - 14:59
Up
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Résolu Re: Petite modification de script

le Ven 12 Fév 2016 - 16:18
Il faut absolument que tu te mettes à la place des gens qui veulent te donner un coup de main.

Dès le premier post, j'ai pas été plus loin que :
- créer un nouveau projet
- copier le script que tu fournis
- ajouter quelques équipement via un événement
- Lancer le projet

J'ai rien correspondant a ce que tu mentionnes, je passe à un autre sujet.
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petite modification de script

le Ven 12 Fév 2016 - 16:56
Ouh là, j'ai zappé de mettre la démo. La voici : http://www.mediafire.com/download/kayeps07khf830u/Ace+menu2.exe

Il faut aller chercher les équipements avec le cristal du centre (en bas à gauche) et appuyer sur Shift lorsqu'on sélectionne des équipements verts, oranges ou rouges pour constater le problème de ma Capture 2.
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petite modification de script

le Mer 17 Fév 2016 - 22:34
Up
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Résolu Re: Petite modification de script

le Jeu 18 Fév 2016 - 10:37
J'essai d'y jeter un coup d'oeil la semaine prochaine, une fois rentré de mon déplacement pro
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Résolu Re: Petite modification de script

le Dim 21 Fév 2016 - 20:00
Je commence à me mettre sur tes modifications. Bon celle-ci, n'est pas simple, car la gestion d'écriture des statuts de l'arme se fait vraiment cradement. C'est à dire que l'on réécris sur le bitmap en décalant l'écriture à chaque descente ou monté ce qui est complètement inadapté.

La bonne solution aurait été de créer une fenêtre Window_Selectable avec un bitmap de contenu plus grand que la fenêtre ce qui aurai géré automatiquement les flèches de scrolling.

Je vais voir ce que je peux faire, mais il y a de forte chance que je sois obliger de recréer cette fenêtre.
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petite modification de script

le Dim 21 Fév 2016 - 20:13
Je n'ai pas les compétences pour pouvoir dire si les scripts utilisés sont bien faits ou non, mais si tu vois qu'il y a des améliorations à faire, n'hésite pas si ce n'est pas trop compliqué.
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Résolu Re: Petite modification de script

le Dim 21 Fév 2016 - 20:20
J'suis entrain de rajouter une fenêtre sélectionnable pour que le fonctionnement soit conforme à tes attentes, mais pas sur que je finisse ce soir
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petite modification de script

le Dim 21 Fév 2016 - 20:21
Ce n'est pas un souci, je ne suis pas à un jour près. Merci pour ton aide.
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Résolu Re: Petite modification de script

le Dim 21 Fév 2016 - 22:49
Ca devrait correspondre à tes attentes :

Code:
#Modif class Scene_Equip
class Scene_Equip < Scene_MenuBase
 
  #Modification de l'update
  alias update_interface update
  def update
    update_interface
    if Input.trigger?(:A)
      return if !@item_window.active && !@slot_window.active && @status_window.menu == 0
      if @item_window.item != nil && !@slot_window.active && @item_window.visible
        Sound.play_cursor
        switch_info
      end
      if @slot_window.visible && @slot_window.item != nil
        Sound.play_cursor
        switch_info
      end
    elsif Input.trigger?(:UP) && @status_window.menu == 1
      Sound.play_cursor
      @status_window.upStat
      #@status_window.refresh(@status_window.item_actuel)
    elsif Input.trigger?(:DOWN) && @status_window.menu == 1
      Sound.play_cursor
      @status_window.downStat
      #@status_window.refresh(@status_window.item_actuel)
    elsif Input.trigger?(:B) && @status_window.menu == 1
      Sound.play_cursor
      switch_info
    end
  end
 
  #Switch vers le menu info
  def switch_info
    if @status_window.menu == 1
      @status_window.menu = 0
      @status_window.ligne_actuel = 0
      @item_window.activate if @item_window.visible
      @slot_window.activate if @slot_window.visible
      item = nil
    else
      @status_window.menu = 1
      if @item_window.visible
        @item_window.deactivate
        item = @item_window.item
      elsif @slot_window.visible
        @slot_window.deactivate
        item = @actor.equips[@slot_window.index]
      end
    end
    @status_window.recreate_contents(item)
  end
 
end
#Modif Window_EquipStatus
class Window_EquipStatus < Window_Base
 
  attr_accessor :menu #Ajout de la variable menu
  attr_reader :ligne_actuel #Ajout de la variable ligne actuel
 
  #Modification Initialisation
  alias initialize_interface initialize
  def initialize(*args)
    @menu = 0
    @ligne_actuel = 0
    initialize_interface(*args)
  end
 
  #Modification de la ligne actuel
  def ligne_actuel=(value)
    @ligne_actuel = [0,[value,@max_ligne-8].min].max
  end
 
  def recreate_contents(item)
    if @menu == 0
      create_contents
    end
    refresh(item)
  end
 
  #Modifiication du refresh
  alias refresh_interface refresh
  def refresh(item = nil)
    if @menu == 0
      refresh_interface
    else
      draw_interface(item)
    end
  end
 
  #Récuperation de l'item_actuel
  def item_actuel
    return @item
  end
 
  #Creation de la fenetre d'info
  def draw_interface(item)
    self.oy = 0
    if item == nil
      create_contents
      draw_text_ex(0, 0, "")
      @max_ligne = 0
      @item = nil
    else
      # compter le nombre de ligne afin de créer le contennts de bonne taille
      @max_ligne = 6
      for i in 0..7
        if item.instance_mult_lvl_bonus(i) != 1 || item.instance_static_lvl_bonus(i) != 0
          @max_ligne += 2
        end
      end
     
      self.contents = Bitmap.new(contents_width, @max_ligne * 24)
     
      @item = item
#~      draw_icon(item.icon_index , 0, -@ligne_actuel*24)
#~      contents.font.color = item.rarity_colour
#~      contents.draw_text(24, -88-@ligne_actuel*24, contents.width, contents.height, item.name)
      contents.font.color = system_color
      contents.draw_text(0, 0, contents.width, 24, "Niveau :")
      contents.font.color = normal_color
      contents.draw_text(0, 24, contents.width, 24, item.level.to_s + " / " + item.max_level.to_s)
      contents.font.color = system_color
      contents.draw_text(0, 48, contents.width, 24, "Expérience :")
      contents.font.color = normal_color
      contents.draw_text(0, 72, contents.width, 24, item.exp.to_s)
      contents.font.color = normal_color
      contents.draw_text(0, 96, contents.width, 24, item.exp_to_level.to_s)
      contents.font.color = system_color
      contents.draw_text(0, 120, contents.width, 24, "Prochains bonus :")

      j = 0
      for i in 0..7
        if item.instance_mult_lvl_bonus(i) != 1 || item.instance_static_lvl_bonus(i) != 0
          next_value = item.params[i]*item.instance_mult_lvl_bonus(i)+item.instance_static_lvl_bonus(i)
          contents.font.color = normal_color
          contents.draw_text(0 , 144 + (48 * j), contents.width, 24, Vocab.param(i))
          contents.font.color = normal_color
          contents.draw_text(0 , 168 + (48 * j), contents.width, 24, item.params[i].to_s+" passe à "+next_value.floor.to_s)
          j += 1
        end
      end
    end
  end
 
  def downStat
    dif = (@max_ligne * 24) - contents_height
    if self.oy + 24 > dif
      self.oy = [dif,0].max
    else
      self.oy += 24
    end
  end
 
  def upStat
    if self.oy - 24 < 0
      self.oy = 0
    else
      self.oy -= 24
    end
  end
 
end

avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petite modification de script

le Lun 22 Fév 2016 - 18:22
Oui, c'est bien ça. Merci bien. Juste une chose : comment on peut régler les lignes de texte pour qu'on ne puisse pas voir la ligne du bas qui déborde ? Là, ça fait toujours comme sur ma Capture 2, j'aimerais régler ça, je pense que ce n'est pas un truc sorcier dans le script mais je ne sais pas à quoi il faut toucher.^^
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Résolu Re: Petite modification de script

le Lun 22 Fév 2016 - 18:47
logiquement ça ne devrait pas le faire, la hauteur du conteneur de la fenêtre fait 192 pixel et les lignes font 24pxl ce qui permet d'avoir un nombre de lignes entier sur la hauteur.

ptet une question de taille de police, je sais pas trop.
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petite modification de script

le Lun 22 Fév 2016 - 19:00
Peut-être y a-t-il un décalage à faire au niveau de la première ligne, non ?
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Résolu Re: Petite modification de script

le Lun 22 Fév 2016 - 20:37
non j'ai trouvé, en fait, la fonction retournant la hauteur de la fenêtre de base est modifié dans le script d'origine Window_EquipStatus :

Code:
  #--------------------------------------------------------------------------
  # * Get Window Height
  #--------------------------------------------------------------------------
  def window_height
    fitting_height(visible_line_number)
  end

Du coup, comme la fonction contents_height l'utilise, ça retourne 192 à tord, hors notre affichage peut dépasser les 8 lignes. Donc on va le feinter en modifiant le padding :

Code:
#Modif class Scene_Equip
class Scene_Equip < Scene_MenuBase
 
  #Modification de l'update
  alias update_interface update
  def update
    update_interface
    if Input.trigger?(:SHIFT)
      return if !@item_window.active && !@slot_window.active && @status_window.menu == 0
      if @item_window.item != nil && !@slot_window.active && @item_window.visible
        if @status_window.menu == 0
          Sound.play_cursor
        else
          Sound.play_cancel
        end
        switch_info
      end
      if @slot_window.visible && @slot_window.item != nil
        if @status_window.menu == 0
          Sound.play_cursor
        else
          Sound.play_cancel
        end
        switch_info
      end
    elsif Input.trigger?(:UP) && @status_window.menu == 1
      Sound.play_cursor
      @status_window.upStat
      #@status_window.refresh(@status_window.item_actuel)
    elsif Input.trigger?(:DOWN) && @status_window.menu == 1
      Sound.play_cursor
      @status_window.downStat
      #@status_window.refresh(@status_window.item_actuel)
    elsif Input.trigger?(:B) && @status_window.menu == 1
      Sound.play_cancel
      switch_info
    end
  end
 
  #Switch vers le menu info
  def switch_info
    if @status_window.menu == 1
      @status_window.menu = 0
      @status_window.ligne_actuel = 0
      @item_window.activate if @item_window.visible
      @slot_window.activate if @slot_window.visible
      item = nil
    else
      @status_window.menu = 1
      if @item_window.visible
        @item_window.deactivate
        item = @item_window.item
      elsif @slot_window.visible
        @slot_window.deactivate
        item = @actor.equips[@slot_window.index]
      end
    end
    @status_window.recreate_contents(item)
  end
 
end
#Modif Window_EquipStatus
class Window_EquipStatus < Window_Base
 
  attr_accessor :menu #Ajout de la variable menu
  attr_reader :ligne_actuel #Ajout de la variable ligne actuel
 
  #Modification Initialisation
  alias initialize_interface initialize
  def initialize(*args)
    @menu = 0
    @ligne_actuel = 0
    initialize_interface(*args)
  end
 
  #Modification de la ligne actuel
  def ligne_actuel=(value)
    @ligne_actuel = [0,[value,@max_ligne-8].min].max
  end
 
  def recreate_contents(item)
    if @menu == 0
      self.padding = 12
      create_contents
    else
      self.padding = 16
    end
    refresh(item)
  end
 
  #Modifiication du refresh
  alias refresh_interface refresh
  def refresh(item = nil)
    if @menu == 0
      refresh_interface
    else
      draw_interface(item)
    end
  end
 
  #Récuperation de l'item_actuel
  def item_actuel
    return @item
  end
 
  #Creation de la fenetre d'info
  def draw_interface(item)
    self.oy = 0
    if item == nil
      create_contents
      draw_text_ex(0, 0, "")
      @max_ligne = 0
      @item = nil
    else
      # compter le nombre de ligne afin de créer le contennts de bonne taille
      @max_ligne = 6
      for i in 0..7
        if item.instance_mult_lvl_bonus(i) != 1 || item.instance_static_lvl_bonus(i) != 0
          @max_ligne += 2
        end
      end
     
      self.contents = Bitmap.new(width - self.padding * 2, @max_ligne * 24)
     
      @item = item
#~      draw_icon(item.icon_index , 0, -@ligne_actuel*24)
#~      contents.font.color = item.rarity_colour
#~      contents.draw_text(24, -88-@ligne_actuel*24, contents.width, contents.height, item.name)

      contents.font.color = system_color
      contents.draw_text(0, 0, contents.width, 24, "Niveau :")
      contents.font.color = normal_color
      if item.level != item.max_level
        contents.draw_text(0, 24, contents.width, 24, item.level.to_s + " / " + item.max_level.to_s)
      else
        contents.draw_text(0, 24, contents.width, 24, "-- Max --")
      end
      contents.font.color = system_color
      contents.draw_text(0, 48, contents.width, 24, "Expérience :")
      contents.font.color = normal_color
      contents.draw_text(0, 72, contents.width, 24, item.exp.to_s)
      contents.font.color = normal_color
      contents.draw_text(0, 96, contents.width, 24, item.exp_to_level.to_s)
      contents.font.color = system_color
      contents.draw_text(0, 120, contents.width, 24, "Prochains bonus :")

      j = 0
      for i in 0..7
        if item.instance_mult_lvl_bonus(i) != 1 || item.instance_static_lvl_bonus(i) != 0
          next_value = item.params[i]*item.instance_mult_lvl_bonus(i)+item.instance_static_lvl_bonus(i)
          contents.font.color = normal_color
          contents.draw_text(0 , 144 + (48 * j), contents.width, 24, Vocab.param(i))
          contents.font.color = normal_color
          contents.draw_text(0 , 168 + (48 * j), contents.width, 24, item.params[i].to_s+" passe à "+next_value.floor.to_s)
          j += 1
        end
      end
    end
  end
 
  def downStat
    dif = (@max_ligne * 24) - (height - self.padding * 2)
    if self.oy + 24 > dif
      self.oy = [dif,0].max
    else
      self.oy += 24
    end
  end
 
  def upStat
    if self.oy - 24 < 0
      self.oy = 0
    else
      self.oy -= 24
    end
  end
 
end
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petite modification de script

le Lun 22 Fév 2016 - 20:57
Effectivement, c'est corrigé. Par contre, j'ai trouvé un bug. Si on appuie sur la touche de l'interface, qu'on utilise la touche Bas pour descendre la fenêtre, puis qu'on revient sur l'écran normal, il y a un décalage au niveau de l'affichage des stats. Un autre détail aussi : est-ce que c'est possible, dans le cas où le défilement n'est pas disponible, qu'on n'entende pas le bruit du curseur lorsqu'on appuie sur Haut et Bas ?
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Résolu Re: Petite modification de script

le Lun 22 Fév 2016 - 21:10
Voila le tout corrigé :

Code:
#Modif class Scene_Equip
class Scene_Equip < Scene_MenuBase
 
  #Modification de l'update
  alias update_interface update
  def update
    update_interface
    if Input.trigger?(:SHIFT)
      return if !@item_window.active && !@slot_window.active && @status_window.menu == 0
      if @item_window.item != nil && !@slot_window.active && @item_window.visible
        if @status_window.menu == 0
          Sound.play_cursor
        else
          Sound.play_cancel
        end
        switch_info
      end
      if @slot_window.visible && @slot_window.item != nil
        if @status_window.menu == 0
          Sound.play_cursor
        else
          Sound.play_cancel
        end
        switch_info
      end
    elsif Input.trigger?(:UP) && @status_window.menu == 1
      @status_window.upStat
      #@status_window.refresh(@status_window.item_actuel)
    elsif Input.trigger?(:DOWN) && @status_window.menu == 1
      @status_window.downStat
      #@status_window.refresh(@status_window.item_actuel)
    elsif Input.trigger?(:B) && @status_window.menu == 1
      Sound.play_cancel
      switch_info
    end
  end
 
  #Switch vers le menu info
  def switch_info
    if @status_window.menu == 1
      @status_window.menu = 0
      @status_window.ligne_actuel = 0
      @item_window.activate if @item_window.visible
      @slot_window.activate if @slot_window.visible
      item = nil
    else
      @status_window.menu = 1
      if @item_window.visible
        @item_window.deactivate
        item = @item_window.item
      elsif @slot_window.visible
        @slot_window.deactivate
        item = @actor.equips[@slot_window.index]
      end
    end
    @status_window.recreate_contents(item)
  end
 
end
#Modif Window_EquipStatus
class Window_EquipStatus < Window_Base
 
  attr_accessor :menu #Ajout de la variable menu
  attr_reader :ligne_actuel #Ajout de la variable ligne actuel
 
  #Modification Initialisation
  alias initialize_interface initialize
  def initialize(*args)
    @menu = 0
    @ligne_actuel = 0
    initialize_interface(*args)
  end
 
  #Modification de la ligne actuel
  def ligne_actuel=(value)
    @ligne_actuel = [0,[value,@max_ligne-8].min].max
  end
 
  def recreate_contents(item)
    self.oy = 0
    if @menu == 0
      self.padding = 12
      create_contents
    else
      self.padding = 16
    end
    refresh(item)
  end
 
  #Modifiication du refresh
  alias refresh_interface refresh
  def refresh(item = nil)
    if @menu == 0
      refresh_interface
    else
      draw_interface(item)
    end
  end
 
  #Récuperation de l'item_actuel
  def item_actuel
    return @item
  end
 
  #Creation de la fenetre d'info
  def draw_interface(item)
    if item == nil
      create_contents
      draw_text_ex(0, 0, "")
      @max_ligne = 0
      @item = nil
    else
      # compter le nombre de ligne afin de créer le contennts de bonne taille
      @max_ligne = 6
      for i in 0..7
        if item.instance_mult_lvl_bonus(i) != 1 || item.instance_static_lvl_bonus(i) != 0
          @max_ligne += 2
        end
      end
     
      self.contents = Bitmap.new(width - self.padding * 2, @max_ligne * 24)
     
      @item = item
#~      draw_icon(item.icon_index , 0, -@ligne_actuel*24)
#~      contents.font.color = item.rarity_colour
#~      contents.draw_text(24, -88-@ligne_actuel*24, contents.width, contents.height, item.name)

      contents.font.color = system_color
      contents.draw_text(0, 0, contents.width, 24, "Niveau :")
      contents.font.color = normal_color
      if item.level != item.max_level
        contents.draw_text(0, 24, contents.width, 24, item.level.to_s + " / " + item.max_level.to_s)
      else
        contents.draw_text(0, 24, contents.width, 24, "-- Max --")
      end
      contents.font.color = system_color
      contents.draw_text(0, 48, contents.width, 24, "Expérience :")
      contents.font.color = normal_color
      contents.draw_text(0, 72, contents.width, 24, item.exp.to_s)
      contents.font.color = normal_color
      contents.draw_text(0, 96, contents.width, 24, item.exp_to_level.to_s)
      contents.font.color = system_color
      contents.draw_text(0, 120, contents.width, 24, "Prochains bonus :")

      j = 0
      for i in 0..7
        if item.instance_mult_lvl_bonus(i) != 1 || item.instance_static_lvl_bonus(i) != 0
          next_value = item.params[i]*item.instance_mult_lvl_bonus(i)+item.instance_static_lvl_bonus(i)
          contents.font.color = normal_color
          contents.draw_text(0 , 144 + (48 * j), contents.width, 24, Vocab.param(i))
          contents.font.color = normal_color
          contents.draw_text(0 , 168 + (48 * j), contents.width, 24, item.params[i].to_s+" passe à "+next_value.floor.to_s)
          j += 1
        end
      end
    end
  end
 
  def downStat
    dif = (@max_ligne * 24) - (height - self.padding * 2)
    save_oy = self.oy
    if self.oy + 24 > dif
      self.oy = [dif,0].max
    else
      self.oy += 24
    end
    if save_oy != self.oy
      Sound.play_cursor
    end
  end
 
  def upStat
    save_oy = self.oy
    if self.oy - 24 < 0
      self.oy = 0
    else
      self.oy -= 24
    end
    if save_oy != self.oy
      Sound.play_cursor
    end
  end
 
end
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petite modification de script

le Lun 22 Fév 2016 - 21:49
Génial, j'ai testé et ça marche à la perfection. Merci beaucoup !

Je profite du sujet puisque ça concerne les menus de défilement. J'ai une autre interface, plus simple cette fois, qui aurait besoin aussi d'un menu de défilement. Il s'agit du script de Fomar0153 - Equipment requirements qui permet de mettre des conditions pour porter les équipements. Tout en bas du script, il y a une interface qui a été rajouté (en plein jeu, on peut y accéder lorsqu'on veut changer d'équipement si on appuie sur la touche Ctrl) mais qui, je crois n'est pas top car j'ai une transition lorsque j'appuie sur Ctrl. Je préfèrerais qu'il n'y ait pas de transition, comme tu m'as fait. Et aussi quand la liste des conditions devient grande, ça sort de la fenêtre, d'où le besoin d'un menu défilement. Avec le même principe, touches Haut et Bas pour naviguer, et pas de son si le menu de défilement n'est pas disponible. Est-ce que tu pourrais me faire la modification s\'il te plaît ?

Je te mets une démo à jour : http://www.mediafire.com/download/0q36vkcauvk54b4/Ace+menu5.exe

Le script ici :

Code:
=begin
Equipment Requirements
by Fomar0153
modified by Zouzaka
Version 1.3
----------------------
Notes
----------------------
Adds a level requirement to equipment.
----------------------
Instructions
----------------------
Notetag the weapons/armors like so:
<levelreq x>
<mhpreq x>
<mmpreq x>
<atkreq x>
<defreq x>
<matreq x>
<mdfreq x>
<agireq x>
<lukreq x>
<switchreq x>
<variablereq x,y>
<wepreq x>
<armreq x>
----------------------
Change Log
----------------------
1.0 -> 1.1 Added stat requirements
          Changed script name from Equipment Level Requirements
          to just Equipment Requirements
1.1 -> 1.2 Added switch and other equipment requirements
1.2 -> 1.3 Ajout D'une Window qui affiche les Conditions requises
          Réduit le script de base de plus de 50 lignes
1.3 -> 1.4 Optimisation et resolution de bug
----------------------
Known bugs
----------------------
None
=end
  #--------------------------------------------------------------------------
  # ● If set to true then it compares the requirement with the actor's base
  #  stat rather than their current.
  #--------------------------------------------------------------------------
EQUIPREQ_USE_BASE_STAT = true
  #--------------------------------------------------------------------------
  # ● Vocab for switch's
  #  every switch_id in a different line
  #--------------------------------------------------------------------------
 
Switch_Vocab = {
# Switch_ID => "Vocab",
#2 => "Visiter la Campagne",
}
  #--------------------------------------------------------------------------
  # ● Vocab for variables
  #  every variable_id in a different line
  #--------------------------------------------------------------------------
 
Variable_Vocab = {
# Variable_ID => "Vocab",
#2 => "Nombre de pierres à casser",
}
 
 
class Game_Actor
  def optimize_equipments
    clear_equipments
    equip_slots.size.times do |i|
      next if !equip_change_ok?(i)
      items = $game_party.equip_items.select do |item|
        item.etype_id == equip_slots[i] &&
        equippable?(item) && item.performance >= 0 && reqstate?(item)
      end
      change_equip(i, items.max_by {|item| item.performance })
    end
  end
  def reqstate?(item)
    unless item == nil
      return false if level < item.levelreq
      return false if reqstat(0) < item.mhpreq
      return false if reqstat(1) < item.mmpreq
      return false if reqstat(2) < item.atkreq
      return false if reqstat(3) < item.defreq
      return false if reqstat(4) < item.matreq
      return false if reqstat(5) < item.mdfreq
      return false if reqstat(6) < item.agireq
      return false if reqstat(7) < item.lukreq
      if item.switchreq > 0
        return false unless $game_switches[item.switchreq]
      end
      if item.variablereq != 0
        return false unless $game_variables[item.variablereq[0]] < item.variablereq[1]
      end
      if item.wepreq > 0
        e = []
        for equip in equips
          e.push(equip.id) if equip.class == RPG::Weapon
        end
        return false unless e.include?(item.wepreq)
      end
      if item.armreq > 0
        e = []
        for equip in equips
          e.push(equip.id) if equip.class == RPG::Armor
        end
        return false unless e.include?(item.armreq)
      end
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● New Method
  #--------------------------------------------------------------------------
  def reqstat(id)
    EQUIPREQ_USE_BASE_STAT ? param_base(id) : param(id)
  end
end
class Window_EquipItem
  #--------------------------------------------------------------------------
  # ● Check the requirements
  #--------------------------------------------------------------------------
  def enable?(item)
    return @actor.reqstate?(item)
  end
end
module RPG
  #--------------------------------------------------------------------------
  # ● Equip Item is inherited by both Weapon and Armor
  #--------------------------------------------------------------------------
  class EquipItem
    def variablereq
      self.note =~ /<variablereq (.*),(.*)>/i ? [$1.to_i,$2.to_i] : 0
    end
    def levelreq
      self.note =~ /<levelreq (.*)>/i ? $1.to_i : 0
    end
    def mhpreq
      self.note =~ /<mhpreq (.*)>/i ? $1.to_i : 0
    end
    def mmpreq
      self.note =~ /<mmpreq (.*)>/i ? $1.to_i : 0
    end
    def atkreq
      self.note =~ /<atkreq (.*)>/i ? $1.to_i : 0
    end
    def defreq
      self.note =~ /<defreq (.*)>/i ? $1.to_i : 0
    end
    def matreq
      self.note =~ /<matreq (.*)>/i ? $1.to_i : 0
    end
    def mdfreq
      self.note =~ /<mdfreq (.*)>/i ? $1.to_i : 0
    end
    def agireq
      self.note =~ /<agireq (.*)>/i ? $1.to_i : 0
    end
    def lukreq
      self.note =~ /<lukreq (.*)>/i ? $1.to_i : 0
    end
    def switchreq
      self.note =~ /<switchreq (.*)>/i ? $1.to_i : 0
    end
    def wepreq
      self.note =~ /<wepreq (.*)>/i ? $1.to_i : 0
    end
    def armreq
      self.note =~ /<armreq (.*)>/i ? $1.to_i : 0
    end
  end
end
class Window_Requirement < Window_Base
  def initialize(x, y)
    super(x, y, window_width, window_height)#(x, y, Graphics.width/2, Graphics.height)
    self.openness = 0
    self.z = 250
    @item = nil
    @actor = nil
    refresh
  end
  def window_width
    return 326
  end
  def window_height
    return 224
  end
  def reqstat(id)
    EQUIPREQ_USE_BASE_STAT ? @actor.param_base(id) : @actor.param(id)
  end
  def item ; return @item ; end
  def item=(item)
    @item = item
    refresh
  end
  def actor ; return @actor ; end
  def actor=(actor)
    @actor = actor
    refresh
  end
  def update
    super
      refresh
  end
  def refresh
    contents.clear
    @req = ["item.levelreq","item.mhpreq","item.mmpreq","item.atkreq","item.defreq","item.matreq","item.mdfreq","item.agireq","item.lukreq"]#,"item.wepreq","item.armreq"]
    @vocab_req = [Vocab.level,Vocab.param(0),Vocab.param(1),Vocab.param(2),Vocab.param(3),Vocab.param(4),Vocab.param(5),Vocab.param(6),Vocab.param(7)]#,Vocab.weapon,Vocab.armor]
    @req_condition = ["@actor.level","reqstat(0)","reqstat(1)","reqstat(2)","reqstat(3)","reqstat(4)","reqstat(5)","reqstat(6)","reqstat(7)"]
    @t = 2
    change_color(normal_color)
    draw_text(contents.width/6, 0, contents.width, line_height, "Conditions requises")
    @req.each do |req|
      if item != nil && eval(req) != 0 && actor != nil
        eval(@req_condition[@req.index(req)]) < eval(req) ? change_color(text_color(2)) : change_color(normal_color)
        draw_text(0, line_height*@t, contents.width, line_height, @vocab_req[@req.index(req)]+" requis : "+eval(req).to_s)
        @t += 1
      end
    end
    change_color(normal_color)
    if item != nil && item.wepreq != 0 && actor != nil
      e = []
      for equip in @actor.equips
        if equip.class == RPG::Weapon
          e.push(equip.id)
        end
      end
      change_color(text_color(2)) unless e.include?(item.wepreq)
      draw_text(0, line_height*@t, contents.width, line_height, "Arme requise : "+$data_weapons[item.wepreq].name)
      @t += 1
    end
    change_color(normal_color)
    if item != nil && item.armreq != 0 && actor != nil
      e = []
      for equip in @actor.equips
        e.push(equip.id) if equip.class == RPG::Armor
      end
      change_color(text_color(2)) unless e.include?(item.armreq)
      draw_text(0, line_height*(@t), contents.width, line_height, "Armure requise : "+$data_armors[item.armreq].name)
      @t += 1
    end
    if item && item.switchreq != 0
      $game_switches[item.switchreq] ? change_color(normal_color) : change_color(text_color(2))
      draw_text(0, line_height*(@t), contents.width, line_height, Switch_Vocab[item.switchreq])
      @t += 1
    end
    if item && item.variablereq != 0
      $game_variables[item.variablereq[0]] >= item.variablereq[1] ? change_color(normal_color) : change_color(text_color(2))
      draw_text(0, line_height*(@t), contents.width, line_height, Variable_Vocab[item.variablereq[0]]+" "+$game_variables[item.variablereq[0]].to_s+"/"+item.variablereq[1].to_s)
    end
  end
end
 
#~ #==============================================================================
#~ # ** Scene_Equip
#~ #------------------------------------------------------------------------------
#~ #  This class performs the equipment screen processing.
#~ #==============================================================================
 
class Scene_Equip
  alias :old_start :start
  def start
    old_start
    @window_req = Window_Requirement.new(0,192)#(Graphics.width/4,0)
  end
  alias :old_update :update
  def update
    old_update
    if Input.trigger?(:CTRL)
      if @window_req.openness == 0 && @item_window.active && @item_window.item != nil
        Sound.play_cursor
        @window_req.item=@item_window.item
        @window_req.actor= @actor
        @background = Sprite.new
        @background.z = 200
        @background.bitmap = Bitmap.new(Graphics.width, Graphics.height)
       # @background.bitmap.fill_rect(0,0,Graphics.width,Graphics.height,Color.new(0, 0, 0,128))
        @window_req.open
        @item_window.deactivate
        @item_window.visible = false
      elsif @window_req.openness == 255
        Sound.play_cancel
        @background.dispose if @background
        @window_req.close
        @item_window.activate
        @item_window.visible = true
      end
    elsif Input.trigger?(:B)
      if @window_req.openness == 255
        Sound.play_cancel
        @background.dispose if @background
        @window_req.close
        @item_window.activate
        @item_window.visible = true
      end
    end
  end
end
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Résolu Re: Petite modification de script

le Mar 23 Fév 2016 - 18:15
Le soucis, c'est que ton projet contient énormément de scripts venant de tout part, et que le rafistolage avec des bouts de scotchs un peu partout, va te nécessiter un scripteur a temps complet.

Au vue des scripts, j'ai l'impression que Vincent26 avait cette charge. Peut-être devrais-tu te rapprocher de lui, pour voir ça.
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petite modification de script

le Mar 23 Fév 2016 - 18:28
C'est Zouzaka qui m'avait cette interface à la base mais lui comme Vincent ne sont pas dispos depuis plusieurs mois. C'est pour cela que je poste ça ici. Mais si ça peut te rassurer, c'est la dernière interface qui comporte cette lacune du menu défilant.
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petite modification de script

le Ven 26 Fév 2016 - 16:24
Petit up

J'ai voulu reprendre le principe que tu avais fait mais sans succès. Je n'arrive pas non plus à enlever la transition à chaque ouverture et fermeture de l'interface.
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Résolu Re: Petite modification de script

le Ven 26 Fév 2016 - 16:49
J'ai un pique de boulot je ne pourrais pas regarder avant samedi soir
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Petite modification de script

le Dim 28 Fév 2016 - 9:31
Ok, pas de soucis. Je ne suis pas à un jour près.
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Résolu Re: Petite modification de script

le Dim 28 Fév 2016 - 10:39
Pour la transition d'ouverture viré :

Code:
=begin
Equipment Requirements
by Fomar0153
modified by Zouzaka
Version 1.3
----------------------
Notes
----------------------
Adds a level requirement to equipment.
----------------------
Instructions
----------------------
Notetag the weapons/armors like so:
<levelreq x>
<mhpreq x>
<mmpreq x>
<atkreq x>
<defreq x>
<matreq x>
<mdfreq x>
<agireq x>
<lukreq x>
<switchreq x>
<variablereq x,y>
<wepreq x>
<armreq x>
----------------------
Change Log
----------------------
1.0 -> 1.1 Added stat requirements
          Changed script name from Equipment Level Requirements
          to just Equipment Requirements
1.1 -> 1.2 Added switch and other equipment requirements
1.2 -> 1.3 Ajout D'une Window qui affiche les Conditions requises
          Réduit le script de base de plus de 50 lignes
1.3 -> 1.4 Optimisation et resolution de bug
----------------------
Known bugs
----------------------
None
=end
  #--------------------------------------------------------------------------
  # ● If set to true then it compares the requirement with the actor's base
  #  stat rather than their current.
  #--------------------------------------------------------------------------
EQUIPREQ_USE_BASE_STAT = true
  #--------------------------------------------------------------------------
  # ● Vocab for switch's
  #  every switch_id in a different line
  #--------------------------------------------------------------------------
 
Switch_Vocab = {
# Switch_ID => "Vocab",
#2 => "Visiter la Campagne",
}
  #--------------------------------------------------------------------------
  # ● Vocab for variables
  #  every variable_id in a different line
  #--------------------------------------------------------------------------
 
Variable_Vocab = {
# Variable_ID => "Vocab",
#2 => "Nombre de pierres à casser",
}
 
 
class Game_Actor
  def optimize_equipments
    clear_equipments
    equip_slots.size.times do |i|
      next if !equip_change_ok?(i)
      items = $game_party.equip_items.select do |item|
        item.etype_id == equip_slots[i] &&
        equippable?(item) && item.performance >= 0 && reqstate?(item)
      end
      change_equip(i, items.max_by {|item| item.performance })
    end
  end
  def reqstate?(item)
    unless item == nil
      return false if level < item.levelreq
      return false if reqstat(0) < item.mhpreq
      return false if reqstat(1) < item.mmpreq
      return false if reqstat(2) < item.atkreq
      return false if reqstat(3) < item.defreq
      return false if reqstat(4) < item.matreq
      return false if reqstat(5) < item.mdfreq
      return false if reqstat(6) < item.agireq
      return false if reqstat(7) < item.lukreq
      if item.switchreq > 0
        return false unless $game_switches[item.switchreq]
      end
      if item.variablereq != 0
        return false unless $game_variables[item.variablereq[0]] < item.variablereq[1]
      end
      if item.wepreq > 0
        e = []
        for equip in equips
          e.push(equip.id) if equip.class == RPG::Weapon
        end
        return false unless e.include?(item.wepreq)
      end
      if item.armreq > 0
        e = []
        for equip in equips
          e.push(equip.id) if equip.class == RPG::Armor
        end
        return false unless e.include?(item.armreq)
      end
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● New Method
  #--------------------------------------------------------------------------
  def reqstat(id)
    EQUIPREQ_USE_BASE_STAT ? param_base(id) : param(id)
  end
end
class Window_EquipItem
  #--------------------------------------------------------------------------
  # ● Check the requirements
  #--------------------------------------------------------------------------
  def enable?(item)
    return @actor.reqstate?(item)
  end
end
module RPG
  #--------------------------------------------------------------------------
  # ● Equip Item is inherited by both Weapon and Armor
  #--------------------------------------------------------------------------
  class EquipItem
    def variablereq
      self.note =~ /<variablereq (.*),(.*)>/i ? [$1.to_i,$2.to_i] : 0
    end
    def levelreq
      self.note =~ /<levelreq (.*)>/i ? $1.to_i : 0
    end
    def mhpreq
      self.note =~ /<mhpreq (.*)>/i ? $1.to_i : 0
    end
    def mmpreq
      self.note =~ /<mmpreq (.*)>/i ? $1.to_i : 0
    end
    def atkreq
      self.note =~ /<atkreq (.*)>/i ? $1.to_i : 0
    end
    def defreq
      self.note =~ /<defreq (.*)>/i ? $1.to_i : 0
    end
    def matreq
      self.note =~ /<matreq (.*)>/i ? $1.to_i : 0
    end
    def mdfreq
      self.note =~ /<mdfreq (.*)>/i ? $1.to_i : 0
    end
    def agireq
      self.note =~ /<agireq (.*)>/i ? $1.to_i : 0
    end
    def lukreq
      self.note =~ /<lukreq (.*)>/i ? $1.to_i : 0
    end
    def switchreq
      self.note =~ /<switchreq (.*)>/i ? $1.to_i : 0
    end
    def wepreq
      self.note =~ /<wepreq (.*)>/i ? $1.to_i : 0
    end
    def armreq
      self.note =~ /<armreq (.*)>/i ? $1.to_i : 0
    end
  end
end
class Window_Requirement < Window_Base
  def initialize(x, y)
    super(x, y, window_width, window_height)#(x, y, Graphics.width/2, Graphics.height)
    #self.openness = 0
    self.visible = false
    self.z = 250
    @item = nil
    @actor = nil
    refresh
  end
  def window_width
    return 326
  end
  def window_height
    return 224
  end
  def reqstat(id)
    EQUIPREQ_USE_BASE_STAT ? @actor.param_base(id) : @actor.param(id)
  end
  def item ; return @item ; end
  def item=(item)
    @item = item
    refresh
  end
  def actor ; return @actor ; end
  def actor=(actor)
    @actor = actor
    refresh
  end
  def update
    super
      refresh
  end
  def refresh
    contents.clear
    @req = ["item.levelreq","item.mhpreq","item.mmpreq","item.atkreq","item.defreq","item.matreq","item.mdfreq","item.agireq","item.lukreq"]#,"item.wepreq","item.armreq"]
    @vocab_req = [Vocab.level,Vocab.param(0),Vocab.param(1),Vocab.param(2),Vocab.param(3),Vocab.param(4),Vocab.param(5),Vocab.param(6),Vocab.param(7)]#,Vocab.weapon,Vocab.armor]
    @req_condition = ["@actor.level","reqstat(0)","reqstat(1)","reqstat(2)","reqstat(3)","reqstat(4)","reqstat(5)","reqstat(6)","reqstat(7)"]
    @t = 2
    change_color(normal_color)
    draw_text(contents.width/6, 0, contents.width, line_height, "Conditions requises")
    @req.each do |req|
      if item != nil && eval(req) != 0 && actor != nil
        eval(@req_condition[@req.index(req)]) < eval(req) ? change_color(text_color(2)) : change_color(normal_color)
        draw_text(0, line_height*@t, contents.width, line_height, @vocab_req[@req.index(req)]+" requis : "+eval(req).to_s)
        @t += 1
      end
    end
    change_color(normal_color)
    if item != nil && item.wepreq != 0 && actor != nil
      e = []
      for equip in @actor.equips
        if equip.class == RPG::Weapon
          e.push(equip.id)
        end
      end
      change_color(text_color(2)) unless e.include?(item.wepreq)
      draw_text(0, line_height*@t, contents.width, line_height, "Arme requise : "+$data_weapons[item.wepreq].name)
      @t += 1
    end
    change_color(normal_color)
    if item != nil && item.armreq != 0 && actor != nil
      e = []
      for equip in @actor.equips
        e.push(equip.id) if equip.class == RPG::Armor
      end
      change_color(text_color(2)) unless e.include?(item.armreq)
      draw_text(0, line_height*(@t), contents.width, line_height, "Armure requise : "+$data_armors[item.armreq].name)
      @t += 1
    end
    if item && item.switchreq != 0
      $game_switches[item.switchreq] ? change_color(normal_color) : change_color(text_color(2))
      draw_text(0, line_height*(@t), contents.width, line_height, Switch_Vocab[item.switchreq])
      @t += 1
    end
    if item && item.variablereq != 0
      $game_variables[item.variablereq[0]] >= item.variablereq[1] ? change_color(normal_color) : change_color(text_color(2))
      draw_text(0, line_height*(@t), contents.width, line_height, Variable_Vocab[item.variablereq[0]]+" "+$game_variables[item.variablereq[0]].to_s+"/"+item.variablereq[1].to_s)
    end
  end
end
 
#~ #==============================================================================
#~ # ** Scene_Equip
#~ #------------------------------------------------------------------------------
#~ #  This class performs the equipment screen processing.
#~ #==============================================================================
 
class Scene_Equip
  alias :old_start :start
  def start
    old_start
    @window_req = Window_Requirement.new(0,192)#(Graphics.width/4,0)
  end
  alias :old_update :update
  def update
    old_update
    if Input.trigger?(:CTRL)
      #if @window_req.openness == 0 && @item_window.active && @item_window.item != nil
      if !@window_req.visible && @item_window.active && @item_window.item != nil
        Sound.play_cursor
        @window_req.item=@item_window.item
        @window_req.actor= @actor
        @background = Sprite.new
        @background.z = 200
        @background.bitmap = Bitmap.new(Graphics.width, Graphics.height)
      # @background.bitmap.fill_rect(0,0,Graphics.width,Graphics.height,Color.new(0, 0, 0,128))
        #@window_req.open
        @window_req.visible = true
        @item_window.deactivate
        @item_window.visible = false
      #elsif @window_req.openness == 255
      elsif @window_req.visible
        Sound.play_cancel
        @background.dispose if @background
        #@window_req.close
        @item_window.activate
        @item_window.visible = true
        @window_req.visible = false
      end
    elsif Input.trigger?(:B)
      #if @window_req.openness == 255
      if @window_req.visible
        Sound.play_cancel
        @background.dispose if @background
        #@window_req.close
        @item_window.activate
        @item_window.visible = true
        @window_req.visible = false
      end
    end
  end
end
class Scene_Item < Scene_ItemBase
  alias :old_start :start
  def start
    old_start
    @window_req = Window_Requirement.new(0,192)#(Graphics.width/4,0)
    @window_req.width = 544
  end
  alias :old_update :update
  def update
    old_update
    if Input.trigger?(:CTRL)
      #if @window_req.openness == 0 && (@item_window.item.class == RPG::Weapon || @item_window.item.class == RPG::Armor)
      if !@window_req.visible && (@item_window.item.class == RPG::Weapon || @item_window.item.class == RPG::Armor)
        Sound.play_cursor
        @window_req.item=@item_window.item
        @window_req.actor= @actor
        @background = Sprite.new
        @background.z = 200
        @background.bitmap = Bitmap.new(Graphics.width, Graphics.height)
      #  @background.bitmap.fill_rect(0,0,Graphics.width,Graphics.height,Color.new(0, 0, 0,128))
        #@window_req.open
        @item_window.visible = true
        @item_window.deactivate
        @item_window.visible = false
      #elsif @window_req.openness == 255
      elsif @window_req.visible
        Sound.play_cancel
        @background.dispose if @background
        #@window_req.close
        @item_window.activate
        @item_window.visible = true
        @item_window.visible = false
      end
    elsif Input.trigger?(:B)
      #if @window_req.openness == 255
      if @window_req.visible
        Sound.play_cancel
        @background.dispose if @background
        #@window_req.close
        @item_window.activate
        @item_window.visible = true
        @item_window.visible = false
      end
    end
  end
end

par contre, pour la gestion du défilement, tu pourrais me paramétrer un objet avec suffisamment de conditions pour que ça dépasse le cadre?
Contenu sponsorisé

Résolu Re: Petite modification de script

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