¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1 ¿Cómo hago esto? (Script) el Vie Dic 14, 2012 5:00 pm

rpgmanumaker

avatar
Pues estoy haciendo un pequeño script con ayuda de youkai. El problema es que me he quedado atascado en él y no podré seguir hasta que youkai me devuelve el PM con la ayuda... pero como quiero hacerlo y llevo un buen rato mirando hacer que falla y como hacer ciertas cosas, y no he encontrada ninguna solución posteare aquí el script y a ver si alguien me puede ayudar. No creo que sea muy difícil solucionarlo, pero yo no sé hacerlo XD.
Código:

class Game_System
 attr_accessor :item_guardados
alias initialize_2 initialize
def initialize
initialize_2
@item_guardados = {}

end
end

#==============================================================================
# ■ Window_Storage
#------------------------------------------------------------------------------
#  Permite guardar y sacar objetos como si fuera un banco.
#==============================================================================

class Window_Storage < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #    x      : ウィンドウの X 座標
  #    y      : ウィンドウの Y 座標
  #    width  : ウィンドウの幅
  #    height : ウィンドウの高さ
  #--------------------------------------------------------------------------
  def initialize
    super(0, 112, 544, 304)
    @column_max = 2
    self.index = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # ● アイテムの取得
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
 
  #--------------------------------------------------------------------------
  # ● アイテムをリストに含めるかどうか
  #    item : アイテム
  #--------------------------------------------------------------------------
  def include?(item)
    return false if item == nil
    if $game_temp.in_battle
      return false unless item.is_a?(RPG::Item)
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● アイテムを許可状態で表示するかどうか
  #    item : アイテム
  #--------------------------------------------------------------------------
  def enable?(item)
    return $game_party.item_can_use?(item)
  end
 
  def refresh
    @data = []
    for item in $game_party.items
     
      next unless include?(item)
      @data.push(item)
      if item.is_a?(RPG::Item) and item.id == $game_party.last_item_id
        self.index = @data.size - 1
      end
    end
    @data.push(nil) if include?(nil)
    @item_max = @data.size
    create_contents
    for i in 0...@item_max
      draw_item(i)
    end
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #    index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    item = @data[index]
    if item != nil
      number = $game_party.item_number(item)
      enabled = enable?(item)
      rect.width -= 4
      draw_item_name(item, rect.x, rect.y, enabled)
      self.contents.draw_text(rect, sprintf(":%2d", number), 2)
    end
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(item == nil ? "" : item.description)
  end
end

#==============================================================================
# ■ Window_StorageI
#------------------------------------------------------------------------------
# Permite guardar y sacar objetos como si fuera un banco.
#==============================================================================
class Window_StoredI < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 112, 544, 304)
    @column_max = 2
    self.index = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # * Get Item
  #--------------------------------------------------------------------------
  def item
    return $data_items[@data.keys[self.index]]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    @data = $game_system.item_guardados  # Aqui pones el hash que quieras usar
    # If item count is not 0, make a bit map and draw all items
    @item_max = @data.keys.size
      if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
        for i in 0...@item_max
            draw_item(i)
        end
      end
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #    index : item number
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = $data_items[@data.keys[index]]
    number = @data.values[index]
    x = index % 2 * 198
    y = index / 2 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    draw_icon(item.icon_index, x, y)
    self.contents.font.size = 15
    self.contents.draw_text(x + 16, y-5, 24, 32, number.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # * Help Text Update
  #--------------------------------------------------------------------------
 
end
#==============================================================================
# ■ Window_Storage_Number
#------------------------------------------------------------------------------
#  ショップ画面で、購入または売却するアイテムの個数を入力するウィンドウです。
#==============================================================================

class Window_Storage_Number < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #    x : ウィンドウの X 座標
  #    y : ウィンドウの Y 座標
  #--------------------------------------------------------------------------
  def initialize
    super(1, 1, 304, 304)
    @item = nil
    @max = 1   
    @number = 1
  end
  #--------------------------------------------------------------------------
  # ● アイテム、最大個数、価格の設定
  #--------------------------------------------------------------------------
  def set(item, max)
    @item = item
    @max = max
    @number = 1
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 入力された個数の設定
  #--------------------------------------------------------------------------
  def number
    return @number
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    y = 96
    self.contents.clear
    draw_item_name(@item, 0, y)
    self.contents.font.color = normal_color
    self.contents.draw_text(212, y, 20, WLH, "×")
    self.contents.draw_text(248, y, 20, WLH, @number, 2)
    self.cursor_rect.set(244, y, 28, WLH)
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    if self.active
      last_number = @number
      if Input.repeat?(Input::RIGHT) and @number < @max
        @number += 1
      end
      if Input.repeat?(Input::LEFT) and @number > 1
        @number -= 1
      end
      if Input.repeat?(Input::UP) and @number < @max
        @number = [@number + 10, @max].min
      end
      if Input.repeat?(Input::DOWN) and @number > 1
        @number = [@number - 10, 1].max
      end
      if @number != last_number
        Sound.play_cursor
        refresh
      end
    end
  end
end

#==============================================================================
# ■ Scene_Shop
#------------------------------------------------------------------------------
#  ショップ画面の処理を行うクラスです。
#==============================================================================

class Scene_Storage < Scene_Base
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    create_command_window
    @dummy_window = Window_Base.new(0, 112, 544, 304)
    @sacar_objeto = Window_StoredI.new
    @sacar_objeto.active = false
    @sacar_objeto.visible = false
    @guardar_objeto = Window_Storage.new
    @guardar_objeto.active = false
    @guardar_objeto.visible = false
    @number_window = Window_Storage_Number.new
    @number_window.active = false
    @number_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
    dispose_command_window
    @dummy_window.dispose
    @sacar_objeto.dispose
    @guardar_objeto.dispose
    @number_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    update_menu_background
    @command_window.update
    @dummy_window.update
    @sacar_objeto.update
    @guardar_objeto.update
    @number_window.update
    if @command_window.active
      update_command_selection
    elsif @sacar_objeto.active
      update_sacar_selection
    elsif @guardar_objeto.active
      update_guardar_selection
    elsif @number_window.active
      update_number_input
    end
  end
  #--------------------------------------------------------------------------
  # ● コマンドウィンドウの作成
  #--------------------------------------------------------------------------
  def create_command_window
    s1 = "Guardar"
    s2 = "Sacar"
    s3 = "Salir"
    @command_window = Window_Command.new(544, [s1, s2, s3], 3)
    @command_window.y = 56
    if $game_temp.shop_purchase_only
      @command_window.draw_item(1, false)
    end
  end
  #--------------------------------------------------------------------------
  # ● コマンドウィンドウの解放
  #--------------------------------------------------------------------------
  def dispose_command_window
    @command_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● コマンド選択の更新
  #--------------------------------------------------------------------------
def update_command_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::C)
      case @command_window.index
      when 0  # 購入する
        Sound.play_decision
        @command_window.active = false
        @dummy_window.visible = false
        @guardar_objeto.active = true
        @guardar_objeto.visible = true
        @guardar_objeto.refresh
      when 1  # 売却する
        if $game_temp.shop_purchase_only
          Sound.play_buzzer
        else
          Sound.play_decision
          @command_window.active = false
          @dummy_window.visible = false
          @sacar_objeto.active = true
          @sacar_objeto.visible = true
          @sacar_objeto.refresh
        end
      when 2  # やめる
        Sound.play_decision
        $scene = Scene_Map.new
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 購入アイテム選択の更新
  #--------------------------------------------------------------------------
  def update_sacar_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @command_window.active = true
      @dummy_window.visible = true
      @sacar_objeto.active = false
      @sacar_objeto.visible = false
      return
    end
    if Input.trigger?(Input::C)
      @guardar_objeto.active = true
      @guardar_objeto.visible = true
      itenes = $game_system.item_guardados #Esto está bien?
      @item = itenes #Esto está bien?
      number = itenes  #¿Qué hago aquí para darle el valor de los items que tenga? [Me refiero a la cantidad]
      if @item == nil or number == 99 #Esto está bien?
        Sound.play_buzzer
      else
        Sound.play_decision
        max = 99
        max = [max, 99 - number].min
        @number_window.set(@item, max)
        @number_window.active = true
        @number_window.visible = true
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 売却アイテム選択の更新
  #--------------------------------------------------------------------------
  def update_guardar_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @command_window.active = true
      @dummy_window.visible = true
      @guardar_objeto.active = false
      @guardar_objeto.visible = false
    elsif Input.trigger?(Input::C)
      @item = $game_system.item_guardados #Esto está bien?
      if @item == nil
        Sound.play_buzzer
      else
        @guardar_objetos.active = true
        @guardar_objetos.visible = true
        Sound.play_decision
        max = $game_system.item_guardado.item_number(@item) #Esto está bien?
        @number_window.set(@item, max) #No sé qué hace
        @number_window.active = true
        @number_window.visible = true
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 個数入力の更新
  #--------------------------------------------------------------------------
  def update_number_input
    if Input.trigger?(Input::B)
      cancel_number_input
    elsif Input.trigger?(Input::C)
      decide_number_input
    end
  end
  #--------------------------------------------------------------------------
  # ● 個数入力のキャンセル
  #--------------------------------------------------------------------------
  def cancel_number_input
    Sound.play_cancel
    @number_window.active = false
    @number_window.visible = false
    case @command_window.index
    when 0  # 購入する
      @sacar_objeto.active = true
      @sacar_objeto.visible = true
    when 1  # 売却する
      @guardar_objeto.active = true
      @guardar_objeto.visible = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 個数入力の決定
  #--------------------------------------------------------------------------
  def decide_number_input
    Sound.play_shop
    @number_window.active = false
    @number_window.visible = false
    case @command_window.index
    when 0  # 購入する
      $game_system.item_guardados - @number_window.set(@item, max)#Esto está bien?
      $game_party.gain_item(@item, @number_window.number)#Esto está bien?
      @guardar_objeto.refresh
      @sacar_objetos.refresh
      @sacar_objeto.active = false
      @sacar_objeto.visible = false
    when 1  # 売却する
      $game_system.item_guardados + @number_window.set(@item, max) #Esto está bien?
      $game_party.lose_item(@item, @number_window.number) #Esto está bien?
      @guardar_objeto.refresh
      @guardar_objeto.active = false
      @guardar_objeto.visible = false
    end
  end
end
Básicamente el problema que tengo es que no sé como guardar los objetos de mi party en un hash ni como sacar los objetos del hash y dárselos a la party...
Seguramente tenga algún fallo más... así que si encuentran alguno díganme cuál es, por favor, y si pueden como solucionarlo.

#2 Re: ¿Cómo hago esto? (Script) el Sáb Ene 05, 2013 7:46 am

urbanhack

avatar
estas haciendo un pequeño script y pones los detalles en ponja? me suena a chamullo... si queres editar un script... primero tenes que saber un poco de lenguaje ruby y segundo... y segundo nada porque al ponja que lo creo para q te ayude no vas a poder hablarle... :S

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

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