Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[RMXP] Scene Equip GStyle

Ver el tema anterior Ver el tema siguiente Ir abajo

[RMXP] Scene Equip GStyle

Mensaje por Wecoc el 2014-02-01, 21:46

Hice éste script inspirándome en el Scene_Equip de un juego comercial llamado Grinsia.

Utiliza el Window + que hice hace nada, aunque no lo requiere (lo usa para dibujar algunos bordes y flechas)

Screens:




Requiere tres windowskins: window_default, window_active y window_disabled.
No me las curré mucho en mi ejemplo, seguro que las podéis hacer mejor.

Pegar encima de main y debajo del Window + si lo usáis

Script:

Código:
#==============================================================================
# ** Window_EquipName
#==============================================================================

class Window_EquipName < Window_Base
  def initialize(actor)
    super(0, 64, 272, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    refresh
  end
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(0, 0, 272-32, 32, @actor.name, 1)
    if $game_party.actors.size > 1
      self.contents.font.color = system_color
      a = self.draw_arrow(8, 24, 1) rescue 0
      self.contents.draw_text(8, 0, 32, 32, "Q") if a != 0
      b = self.draw_arrow(272-16, 24, 2) rescue 0
      self.contents.draw_text(272-64, 0, 32, 32, "W") if b != 0
    end
  end
end

#==============================================================================
# ** Window_EquipLeft
#==============================================================================

class Window_EquipLeft < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     actor : actor
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(0, 128, 272, 352)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_actor_graphic(@actor, 42, 52)
    draw_actor_hp(@actor, 100, 0)
    draw_actor_sp(@actor, 100, 32)
    draw_border(3, 86, self.width-6, 16, 0) rescue nil
    draw_actor_parameter(@actor, 4, 78, 0)
    draw_actor_parameter(@actor, 4, 110, 1)
    draw_actor_parameter(@actor, 4, 142, 2)
    draw_border(3, 196, self.width-6, 16, 0) rescue nil
    draw_actor_parameter(@actor, 4, 192, 3)
    draw_actor_parameter(@actor, 4, 224, 4)
    draw_actor_parameter(@actor, 4, 256, 5)
    draw_actor_parameter(@actor, 4, 288, 6)
    draw_new_parameter(160, 78, @new_atk, @actor.atk)
    draw_new_parameter(160, 110, @new_pdef, @actor.pdef)
    draw_new_parameter(160, 142, @new_mdef, @actor.mdef)
    draw_new_parameter(160, 192, @new_str, @actor.str)
    draw_new_parameter(160, 224, @new_dex, @actor.dex)
    draw_new_parameter(160, 256, @new_agi, @actor.agi)
    draw_new_parameter(160, 288, @new_int, @actor.int)
  end

  def draw_new_parameter(x, y, new_param, actor_param)
    if new_param != nil
      self.contents.font.color = system_color
      self.contents.draw_text(x, y, 40, 32, "->", 1)
      if new_param > actor_param
        self.contents.font.color = Color.new(76, 160, 0, 255)
      elsif new_param < actor_param
        self.contents.font.color = Color.new(191, 32, 0, 255)
      else
        self.contents.font.color = disabled_color
      end
      self.contents.draw_text(x + 40, y, 36, 32, new_param.to_s, 2)
    end
  end
  
  def set_new_parameters(new_atk, new_pdef, new_mdef, new_str, new_dex,
    new_agi, new_int)
    if @new_atk != new_atk or @new_pdef != new_pdef or @new_mdef != new_mdef or
      @new_str != new_str or @new_dex != new_dex or @new_agi != new_agi or
      @new_int != new_int
      @new_atk = new_atk
      @new_pdef = new_pdef
      @new_mdef = new_mdef
      @new_str = new_str
      @new_dex = new_dex
      @new_agi = new_agi
      @new_int = new_int
      refresh
    end
  end
end

#==============================================================================
# ** Window_EquipLeft
#==============================================================================

class Window_EquipRight < Window_Selectable
  def initialize(actor, equip_id)
    super(272, 64 + 83 * equip_id, 368, 83)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    @equip_id = equip_id
    refresh
    self.index = -1
  end

  def item
    return @data[0]
  end

  def refresh
    self.contents.clear
    @data = []
    case @equip_id
    when 0 # Weapon
      self.contents.font.color = system_color
      self.contents.draw_text(0, -6, 128, 32, $data_system.words.weapon)
      self.contents.font.color = normal_color
      @data.push($data_weapons[@actor.weapon_id])
      draw_item_name(@data[0], 0, 24)
    when 1 # Shield
      self.contents.font.color = system_color
      self.contents.draw_text(0, -6, 128, 32, $data_system.words.armor1)
      self.contents.font.color = normal_color
      @data.push($data_armors[@actor.armor1_id])
      draw_item_name(@data[0], 0, 24)
    when 2 # Head
      self.contents.font.color = system_color
      self.contents.draw_text(0, -6, 128, 32, $data_system.words.armor2)
      self.contents.font.color = normal_color
      @data.push($data_armors[@actor.armor2_id])
      draw_item_name(@data[0], 0, 24)
    when 3 # Body
      self.contents.font.color = system_color
      self.contents.draw_text(0, -6, 128, 32, $data_system.words.armor3)
      self.contents.font.color = normal_color
      @data.push($data_armors[@actor.armor3_id])
      draw_item_name(@data[0], 0, 24)
    when 4 # Accessories
      self.contents.font.color = system_color
      self.contents.draw_text(0, -6, 128, 32, $data_system.words.armor4)
      self.contents.font.color = normal_color
      @data.push($data_armors[@actor.armor4_id])
      draw_item_name(@data[0], 0, 24)
    end
  end

  def active=(value)
    super(value)
    if value == true
      if !@actor.equip_fix?(@equip_id)
        self.windowskin = RPG::Cache.windowskin("window_active")
      else
        self.windowskin = RPG::Cache.windowskin("window_disabled")
      end
    else
      self.windowskin = RPG::Cache.windowskin("window_default")
    end
    self.draw_border(3, 38, self.width-6, 16, 0) rescue nil
  end
end

#==============================================================================
# ** Window_EquipItem
#==============================================================================

class Window_EquipItem < Window_Selectable
  def initialize(actor, equip_type)
    super(272, 64, 368, 416)
    @actor = actor
    @equip_type = equip_type
    @column_max = 1
    refresh
    self.active = true
    self.index = -1
    self.z = 1000
  end
  
  def update_help
    if self.visible
      @help_window.set_text(self.item == nil ? "" : self.item.description)
    end
  end
end

#==============================================================================
# ** Scene_Equip
#==============================================================================

class Scene_Equip
  def initialize(actor_index = 0, equip_index = 0)
    @actor_index = actor_index
    @equip_index = equip_index
  end

  def main
    @actor = $game_party.actors[@actor_index]
    @help_window = Window_Help.new
    @name_window = Window_EquipName.new(@actor)
    @left_window = Window_EquipLeft.new(@actor)
    @right_window = []
    
    @right_window1 = Window_EquipRight.new(@actor, 0)
    @right_window2 = Window_EquipRight.new(@actor, 1)
    @right_window3 = Window_EquipRight.new(@actor, 2)
    @right_window4 = Window_EquipRight.new(@actor, 3)
    @right_window5 = Window_EquipRight.new(@actor, 4)
    @item_window1 = Window_EquipItem.new(@actor, 0)
    @item_window2 = Window_EquipItem.new(@actor, 1)
    @item_window3 = Window_EquipItem.new(@actor, 2)
    @item_window4 = Window_EquipItem.new(@actor, 3)
    @item_window5 = Window_EquipItem.new(@actor, 4)

    @right_window1.active = true
    @right_window2.active = false
    @right_window3.active = false
    @right_window4.active = false
    @right_window5.active = false
    @item_window1.visible = false
    @item_window2.visible = false
    @item_window3.visible = false
    @item_window4.visible = false
    @item_window5.visible = false

    @item_window1.help_window = @help_window
    @item_window2.help_window = @help_window
    @item_window3.help_window = @help_window
    @item_window4.help_window = @help_window
    @item_window5.help_window = @help_window

    set_active_right
    refresh
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @help_window.dispose
    @name_window.dispose
    @left_window.dispose
    @right_window1.dispose
    @right_window2.dispose
    @right_window3.dispose
    @right_window4.dispose
    @right_window5.dispose
    @item_window1.dispose
    @item_window2.dispose
    @item_window3.dispose
    @item_window4.dispose
    @item_window5.dispose
  end

  def refresh
    set_active_item
    case @equip_index
    when 0
      item1 = @right_window1.item
    when 1
      item1 = @right_window2.item
    when 2
      item1 = @right_window3.item
    when 3
      item1 = @right_window4.item
    when 4
      item1 = @right_window5.item
    end
    @left_window.set_new_parameters(nil, nil, nil, nil, nil, nil, nil)
    if @item_window.visible
      item2 = @item_window.item
      last_hp = @actor.hp
      last_sp = @actor.sp
      @actor.equip(@equip_index, item2 == nil ? 0 : item2.id)
      new_atk = @actor.atk
      new_pdef = @actor.pdef
      new_mdef = @actor.mdef
      new_str = @actor.str
      new_dex = @actor.dex
      new_agi = @actor.agi
      new_int = @actor.int
      @actor.equip(@equip_index, item1 == nil ? 0 : item1.id)
      @actor.hp = last_hp
      @actor.sp = last_sp
      @left_window.set_new_parameters(new_atk, new_pdef, new_mdef, new_str,
      new_dex, new_agi, new_int)
    end
    @left_window.refresh
  end

  def update
    set_active_item
    @item_window.update
    if @item_window.visible
      update_item
      return
    end
    update_right
  end

  def update_right
    if Input.repeat?(Input::DOWN)
      if Input.trigger?(Input::DOWN)
        $game_system.se_play($data_system.cursor_se)
        @equip_index = [@equip_index + 1, 4].min
        set_active_right
        return
      end
    end
    
    if Input.repeat?(Input::UP)
      if Input.trigger?(Input::UP)
        $game_system.se_play($data_system.cursor_se)
        @equip_index = [@equip_index - 1, 0].max
        set_active_right
        return
      end
    end
    
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Menu.new(2)
      return
    end

    if Input.trigger?(Input::C)
      if @actor.equip_fix?(@equip_index)
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      @item_window.visible = true
      @item_window.index = 0
      refresh
      return
    end

    if Input.trigger?(Input::R)
      $game_system.se_play($data_system.cursor_se)
      @actor_index += 1
      @actor_index %= $game_party.actors.size
      $scene = Scene_Equip.new(@actor_index, 0)
      return
    end

    if Input.trigger?(Input::L)
      $game_system.se_play($data_system.cursor_se)
      @actor_index += $game_party.actors.size - 1
      @actor_index %= $game_party.actors.size
      $scene = Scene_Equip.new(@actor_index, 0)
      return
    end
  end

  def update_item
    if Input.trigger?(Input::DOWN) or Input.trigger?(Input::UP)
      refresh
    end
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @item_window.visible = false
      @item_window.index = -1
      set_active_right
      refresh
      return
    end
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.equip_se)
      item = @item_window.item
      @actor.equip(@equip_index, item == nil ? 0 : item.id)
      @item_window.visible = false
      @item_window.index = -1
      @right_window1.refresh
      @right_window2.refresh
      @right_window3.refresh
      @right_window4.refresh
      @right_window5.refresh
      @item_window.refresh
      refresh
      return
    end
  end
  
  def set_active_right
    @right_window1.active = false
    @right_window2.active = false
    @right_window3.active = false
    @right_window4.active = false
    @right_window5.active = false
    case @equip_index
    when 0
      @right_window1.active = true
      item = @right_window1.item
    when 1
      @right_window2.active = true
      item = @right_window2.item
    when 2
      @right_window3.active = true
      item = @right_window3.item
    when 3
      @right_window4.active = true
      item = @right_window4.item
    when 4
      @right_window5.active = true
      item = @right_window5.item
    end
    @help_window.set_text(item == nil ? "" : item.description)
  end
  
  def set_active_item
    case @equip_index
    when 0
      @item_window = @item_window1
    when 1
      @item_window = @item_window2
    when 2
      @item_window = @item_window3
    when 3
      @item_window = @item_window4
    when 4
      @item_window = @item_window5
    end
  end
end

Demo:
Scene Equip Grinsia

No requiere créditos, aunque como queráis xD

PD.- Dueños del Grinsia, no me denunciéis por ésto, tampoco se parecen tanto :(
avatar
Wecoc
Administrador
Administrador



Créditos 12284

Gracias : 645

Volver arriba Ir abajo

Re: [RMXP] Scene Equip GStyle

Mensaje por zapdos1 el 2014-02-01, 22:51

wow, esto se queda en mi juego sí o sí, muchas gracias por compartirlo, no sabes cuanto estuve buscando un buen script que modifique ese menú en específico.

:D!! a probarlo que onda :)
avatar
zapdos1
Soñador
Soñador

0/3

Créditos 118

Gracias : 4

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.