Partagez
Aller en bas
avatar
Elscorto
Membre

Nombre de messages : 486
Age : 33
Localisation : Dans sa tombe en ce moment
Distinction : Homme de goût en chef.
Date d'inscription : 10/07/2008

Script menu,besoin d'aide [Résolu]

le Ven 30 Jan 2009 - 19:17
Bonjour

Voilà, je m'essaye aux scripts, mon premier test est un menu, je vous montre ce que j'ai fait.

Spoiler:

Le problème est qu'il n'est pas fonctionnel, je m'explique, je sèche complètement pour ce qui du déplacement du curseur pour la sélection de personnages, apparemment c'est dans le def_update_cursor de la classe Window_Selectable si j'ai bien compris, mais là je vais avoir besoin de l'aide de scripteurs, car le curseur se déplace mais revient aussitôt à sa position initiale.

Merci par avance


Dernière édition par Elscorto le Lun 2 Fév 2009 - 18:28, édité 1 fois
avatar
Ksama
Membre

Nombre de messages : 43
Distinction : aucune
Date d'inscription : 25/01/2009

Re: Script menu,besoin d'aide [Résolu]

le Ven 30 Jan 2009 - 19:18
J'ai déjà vu se script sur un site anglais, il n'est pas de toi.

Berka: Oh on se calme, d'abord !
Ensuite, on écrit bien et on argumente...
avatar
Elscorto
Membre

Nombre de messages : 486
Age : 33
Localisation : Dans sa tombe en ce moment
Distinction : Homme de goût en chef.
Date d'inscription : 10/07/2008

Re: Script menu,besoin d'aide [Résolu]

le Ven 30 Jan 2009 - 19:20
j'ai juste modifier le placement des données, sinon je me suis inspiré des différents scripts sur les menus
avatar
Berka
Administrateur

Nombre de messages : 1831
Age : 27
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Re: Script menu,besoin d'aide [Résolu]

le Ven 30 Jan 2009 - 19:37
si le curseur se déplace, c'est qu'il est amovible... c'est déjà ca !
mais s'il se remet au début, c'est qu'il y a un objet qui le replace...
si c'est de facon automatique, alors c'est que c'est un objet qui tourne tout le temps.
comme une scene s'articule autour d'une méthode de mise a jour (def update) appelée dans une boucle (loop do...end)... alors l'objet doit se trouver dans cette méthode.

autrement dit, il doit y avoir un :
Code:
@fenetre_choix.index=0
dans ta méthode update
avatar
Elscorto
Membre

Nombre de messages : 486
Age : 33
Localisation : Dans sa tombe en ce moment
Distinction : Homme de goût en chef.
Date d'inscription : 10/07/2008

Re: Script menu,besoin d'aide [Résolu]

le Dim 1 Fév 2009 - 13:35
Bon ASHKA m'a aidé pour le déplacement du curseur et ça fonctionne, merci à toi.

Maintenant je souhaiterai qu'il soit multi directionnel, c'est à dire que si le curseur est à 0(1er perso), et qu'on appuie sur droite, le curseur prend la position 1 et va sur le 2ème perso, et que si on appuie sur bas, toujours au au 1er perso, le curseur prend la position 2, et va sur le 3ème perso. Et ainsi de suite pour les autres.

Voici le script en question
Spoiler:
Code:

###################################
#Créer par Mog.
#modifier par emixam2 et TheLSSJ
##############

##################################
# Menu Test par Elscorto
##################################

################
# Game_Actor
################

class Game_Actor
  def now_exp
    return @exp - @exp_list[@level]
  end
 
  def next_exp
    return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
  end
end


###############
# Window_Base #
###############
class Window_Base < Window
  def draw_item_icon(item, x, y)
    if item != nil
      draw_icon(item.icon_index, x, y)
    end
  end
  def draw_actor_level_menu(actor, x, y)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 32, WLH, Vocab::level_a)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 16, y, 24, WLH, actor.level, 2)
  end
  def draw_actor_class_menu(actor, x, y)
    self.contents.font.color = normal_color
    self.contents.draw_text(x, y, 85, WLH, actor.class.name)
  end
  def exp_gauge_color1
    return text_color(30)
  end
  def exp_gauge_color2
    return text_color(31)
  end
  def draw_actor_exp_meter(actor, x, y, width = 100)
    if actor.next_exp != 0
      exp = actor.now_exp
    else
      exp = 1
    end
    gw = width * exp / [actor.next_exp, 1].max
    gc1 = exp_gauge_color1
    gc2 = exp_gauge_color2
    self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
    self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 30, WLH, "Exp")
    self.contents.font.color = normal_color
    xr = x + width
    self.contents.draw_text(xr - 60, y, 60, WLH, actor.next_rest_exp_s, 2)
  end
end



###################
# Window_MenuStatus
###################

class Window_MenuStatus< Window_Selectable
  def initialize(x,y)
    super(x,y,544,275)
    refresh
    self.active = false
    self.index = -1
  end
 
  def refresh
    self.contents.clear
    @item_max = $game_party.members.size
    for actor in $game_party.members
# Pour le 1er personnage     
      if actor.index == 0
        draw_actor_graphic(actor,200,60)
        draw_actor_level_menu(actor, 80,0)
        draw_actor_exp_meter(actor, 0 ,60)
        draw_item_icon($data_weapons[actor.weapon_id], 160,60)
          if actor.two_swords_style
            draw_item_icon($data_weapons[actor.armor1_id], 220,60)
          else
            draw_item_icon($data_armors[actor.armor1_id],220,60)
          end
        draw_actor_name(actor, 0, 0)
        draw_actor_state(actor, 160,0)
        draw_actor_hp(actor, 0, 20)
        draw_actor_mp(actor, 0,40)
# Pour le 2ème personnage       
      elsif actor.index == 1
        draw_actor_graphic(actor,472,60)
        draw_actor_level_menu(actor, 352,0)
        draw_actor_exp_meter(actor, 272 ,60)
        draw_item_icon($data_weapons[actor.weapon_id], 432,60)
          if actor.two_swords_style
            draw_item_icon($data_weapons[actor.armor1_id], 492,60)
          else
            draw_item_icon($data_armors[actor.armor1_id],492,60)
          end
        draw_actor_name(actor, 272, 0)
        draw_actor_state(actor,432 ,0)
        draw_actor_hp(actor, 272, 20)
        draw_actor_mp(actor, 272,40)
# Pour le 3ème personnage       
      elsif actor.index == 2
        draw_actor_graphic(actor,200,197)
        draw_actor_level_menu(actor, 80,140)
        draw_actor_exp_meter(actor, 0 ,200)
        draw_item_icon($data_weapons[actor.weapon_id], 160,200)
          if actor.two_swords_style
            draw_item_icon($data_weapons[actor.armor1_id], 220,200)
          else
            draw_item_icon($data_armors[actor.armor1_id],220,200)
          end
        draw_actor_name(actor, 0, 140)
        draw_actor_state(actor, 160,140)
        draw_actor_hp(actor, 0, 160)
        draw_actor_mp(actor, 0,180)
# Pour le 4ème personnage       
      elsif actor.index == 3
        draw_actor_graphic(actor,472,197)
        draw_actor_level_menu(actor, 352,140)
        draw_actor_exp_meter(actor, 272 ,200)
        draw_item_icon($data_weapons[actor.weapon_id], 432,200)
          if actor.two_swords_style
            draw_item_icon($data_weapons[actor.armor1_id], 492,200)
          else
            draw_item_icon($data_armors[actor.armor1_id],492,200)
          end
        draw_actor_name(actor, 272, 140)
        draw_actor_state(actor, 432,140)
        draw_actor_hp(actor, 272, 160)
        draw_actor_mp(actor, 272,180)
      end
    end
  end
 
  #--------------------------------------------------------------------------
  # * Update cursor
  #--------------------------------------------------------------------------
  def update_cursor
    if @index < 0              # ??????
      self.cursor_rect.empty
    elsif @index < @item_max    # ??
        case @index
        when 0
          self.cursor_rect.set(0, 0, 272, 137)
         
        when 1
          self.cursor_rect.set(272, 0, 272, 137)
         
        when 2
        self.cursor_rect.set(0,137,272,137)
         
        when 3
          self.cursor_rect.set(272,137,272,137)
        end
      elsif @index >= 100        # ??

      self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
    else                        # ??
      self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
    end
  end
end


############
# Game_Map #
############

class Game_Map
attr_reader :map_id
  def mpname
  $mpname = load_data("Data/MapInfos.rvdata")
  $mpname[@map_id].name
  end
end

###################
# Window_MapName
###################

class Window_MapName < Window_Base
  def initialize(x, y)
    super(x,y+32, 195, WLH + 50)
    refresh
  end
 
  def refresh
    self.contents.clear
    self.contents.font.color = system_color
    self.contents.draw_text(4, -8, 120, 32, "Localisation")
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 15, 120, 32, $game_map.mpname.to_s, 2)
  end
end

###############
# Window_Time #
###############
class Window_Time < Window_Base
  def initialize(x, y)
    super(x, y+7, 190, WLH + 50)
    refresh
  end

  def refresh
    self.contents.clear
    self.contents.font.color = system_color
    self.contents.draw_text(4, -8, 120, 32, "Temps de jeu")
    @total_sec = Graphics.frame_count / Graphics.frame_rate
    hour = @total_sec / 60 / 60
    min = @total_sec / 60 % 60
    sec = @total_sec % 60
    text = sprintf("%02d:%02d:%02d", hour, min, sec)
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 15, 120, 32, text, 2)
  end
 
  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end
end

#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#  This class performs the menu screen processing.
#==============================================================================

class Scene_Menu
  def main
    start                       
    perform_transition           
    Input.update               
    loop do
      Graphics.update           
      Input.update             
      update                     
      break if $scene != self     
    end
    Graphics.update
    pre_terminate           
    Graphics.freeze             
    terminate                 
  end 
 
  #--------------------------------------------------------------------------
  # * Object Initialization
  #    menu_index : command cursor's initial position
  #--------------------------------------------------------------------------
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end
 
  def create_menu_background
    @menuback_sprite = Sprite.new
    @menuback_sprite.bitmap = $game_temp.background_bitmap
    @menuback_sprite.color.set(16, 16, 16, 128)
    update_menu_background
  end
 
  def dispose_menu_background
    @menuback_sprite.dispose
  end
 
  def update_menu_background
  end
 
  def perform_transition
    Graphics.transition(10)
  end
 
  #--------------------------------------------------------------------------
  # * Start processing
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    create_command_window
    @gold_window = Window_Gold.new(0, 340)
    @status_window = Window_MenuStatus.new(0, 75)
    @temps = Window_Time.new(160,336)
    @lieu = Window_MapName.new(350,311)
    @status_window.openness = 0
    @temps.openness = 0
    @lieu.openness = 0
    @gold_window.openness = 0
    @status_window.open
    @temps.open
    @lieu.open
    @gold_window.open
  end
 
  def pre_terminate
    @status_window.close
    @temps.close
    @lieu.close
    @gold_window.close
    @command_window.close
    begin
      @status_window.update
      @temps.update
      @lieu.update
      @gold_window.update
      @command_window.update
      Graphics.update
    end until @status_window.openness == 0
end
  #--------------------------------------------------------------------------
  # * Termination Processing
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
    @command_window.dispose
    @gold_window.dispose
    @status_window.dispose
    @lieu.dispose
    @temps.dispose
    end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    update_menu_background
    @command_window.update
    @gold_window.update
    @status_window.update
    @lieu.update
    @temps.update
      if @command_window.active
      update_command_selection
    elsif @status_window.active
      update_actor_selection
    end
  end
  #--------------------------------------------------------------------------
  # * Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
    s1 = Vocab::item
    s2 = Vocab::skill
    s3 = Vocab::equip
    s4 = Vocab::status
    s5 = Vocab::save
    s6 = Vocab::game_end
    @command_window = Window_Command.new(544, [s1, s2, s3, s4, s5, s6],4,2)
    @command_window.index = @menu_index
    if $game_party.members.size == 0          # If number of party members is 0
      @command_window.draw_item(0, false)    # Disable item
      @command_window.draw_item(1, false)    # Disable skill
      @command_window.draw_item(2, false)    # Disable equipment
      @command_window.draw_item(3, false)    # Disable status
    end
    if $game_system.save_disabled            # If save is forbidden
      @command_window.draw_item(4, false)    # Disable save
    end
  end
  #--------------------------------------------------------------------------
  # * Update Command Selection
  #--------------------------------------------------------------------------
  def update_command_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::C)
      if $game_party.members.size == 0 and @command_window.index < 4
        Sound.play_buzzer
        return
      elsif $game_system.save_disabled and @command_window.index == 4
        Sound.play_buzzer
        return
      end
      Sound.play_decision
      case @command_window.index
      when 0      # Item
        $scene = Scene_Item.new
      when 1,2,3  # Skill, equipment, status
        start_actor_selection
      when 4      # Save
        $scene = Scene_File.new(true, false, false)
      when 5      # End Game
        $scene = Scene_End.new
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Start Actor Selection
  #--------------------------------------------------------------------------
  def start_actor_selection
    @command_window.active = false
    @status_window.active = true
    if $game_party.last_actor_index < @status_window.item_max
      @status_window.index = $game_party.last_actor_index
    else
      @status_window.index = 0
    end
  end
  #--------------------------------------------------------------------------
  # * End Actor Selection
  #--------------------------------------------------------------------------
  def end_actor_selection
    @command_window.active = true
    @status_window.active = false
    @status_window.index = -1
  end
  #--------------------------------------------------------------------------
  # * Update Actor Selection
  #--------------------------------------------------------------------------
  def update_actor_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      end_actor_selection
    elsif Input.trigger?(Input::C)
      $game_party.last_actor_index = @status_window.index
      Sound.play_decision
      case @command_window.index
      when 1  # skill
        $scene = Scene_Skill.new(@status_window.index)
      when 2  # equipment
        $scene = Scene_Equip.new(@status_window.index)
      when 3  # status
        $scene = Scene_Status.new(@status_window.index)
      end
    end
  end
end

Merci de votre aide.
J'aurais aussi une petite question subsidiaire, le curseur dans le Window_Status ressemble à un gros pavé de la couleur du WindowSkin, je voudrais savoir si c'est possible de remplacer ce gros pavé et faire en sorte que le curseur soit comme une main, plus petit et plus jolie.

J'ai vu que sur le menu Yui de Mog, il utilisait des images pour celà, donc j'aimerai savoir si c'est comme ça qu'il faut faire, où si il y a juste une manipulation à faire en script.
Voici le menu Yui
http://www.rpgmakervx-fr.com/menu-f36/le-mogmenu-yui-10-t178.htm
Merci encore

EDIT : 1ère question réglée, je travaille sur la 2ème question pour le moment. Merci ASHKA.
Contenu sponsorisé

Re: Script menu,besoin d'aide [Résolu]

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