¡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 Mi primera script. (almacén de objetos) el Dom Dic 23, 2012 1:37 pm

rpgmanumaker

avatar
Bueno, llevo bastante intentando aprender RGSS2, para poder programar en VX. Ya sé que con la salida del ACE poco usan el VX, pero yo estoy aprendiendo a programar primero en VX y luego intentaré aprender en el ACE.
Antes de postear la script, tengo que decir: youkai me ha ayudado mucho para hacerla. Ahora mismo él es quien me está ayudando a aprender, y es gracias a él que estoy mejorando y podido hacer la script.
La parte de Window_StoredI es toda suya. También algunos de las partes del script me las dio él. Aunque es normal, estoy aprendiendo y me ha costado mucho hacer este script. Aunque para algunos seguro que es muy fácil XD.

Código:

class Game_System
 attr_accessor :item_guardados
alias initialize_2 initialize
def initialize
initialize_2
@item_guardados = {}
end
end
#==============================================================================
# ■ Window_Storage
#==============================================================================
class Window_Storage < Window_Selectable
  #INITIALIZE
  def initialize(x, y, width, height)
    super(x, y, width, height)
    @column_max = 2
    self.index = 0
    refresh
  end
  #Item
  def item
    return @data[self.index]
  end
  #Include?
  def include?(item)
    return !(item == nil)
  end
  #Enable?
  def enable?(item)
    return $game_party.item_can_use?(item)
  end
  #Refresh
  def refresh
    @data = []
    for item in $game_party.items
      next unless include?(item)
      @data.push(item)
    end
    @data.push(nil) if include?(nil)
    @item_max = @data.size
    self.index = @item_max-1 if  self.index >= @item_max
    create_contents
    for i in 0...@item_max
      draw_item(i)
    end
  end
  #DIbujar item
  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)
      rect.width -= 4
      draw_item_name(item, rect.x, rect.y)
      self.contents.draw_text(rect, sprintf(":%2d", number), 2)
    end
  end
end
class Window_StoredI < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 56,  544, 360)
    @column_max = 2
    self.index = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # * Get Item
  #--------------------------------------------------------------------------
  def item
    return @data.keys[self.index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    @data = $game_system.item_guardados
    # 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)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    i = @data.keys[index]
    number = @data.values[index]
    rect.width -= 4
    draw_item_name(i, rect.x, rect.y)
    self.contents.draw_text(rect, sprintf(":%2d", number), 2)
  end
  #--------------------------------------------------------------------------
  # * Help Text Update
  #--------------------------------------------------------------------------
 
end
#==============================================================================
#Windo_Storage_Number
#==============================================================================
class Window_Storage_Number < Window_Base
  #INITIALIZE
  def initialize
    super(0, 56, 544, 360)
    @item = nil
    @max = 1   
    @number = 1
  end
  #Set
  def set(item, max)
    @item = item
    @max = max
    @number = 1
    refresh
  end
  #Number
  def number
    return @number
  end
  #Refresh
  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
  #Update
  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_Sotarge
#==============================================================================
class Scene_Storage < Scene_Base
  #Start
  def start
    super
    create_menu_background
    create_command_window
    @dummy_window = Window_Base.new(0, 56, 544, 360)
    @sacar_objeto = Window_StoredI.new
    @sacar_objeto.active = false
    @sacar_objeto.visible = false
    @guardar_objeto = Window_Storage.new(0, 56, 544, 360)
    @guardar_objeto.active = false
    @guardar_objeto.visible = false
    @number_window = Window_Storage_Number.new
    @number_window.active = false
    @number_window.visible = false
  end
  #Terminate
  def terminate
    super
    dispose_menu_background
    dispose_command_window
    @dummy_window.dispose
    @sacar_objeto.dispose
    @guardar_objeto.dispose
    @number_window.dispose
  end
  #Update
  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
  #Creaar Command_Window
  def create_command_window
    s1 = "Guardar"
    s2 = "Sacar"
    s3 = "Salir"
    @command_window = Window_Command.new(544, [s1, s2, s3], 3)
    @command_window.y = 0
    if $game_temp.shop_purchase_only
      @command_window.draw_item(1, false)
    end
  end
  #Borrar Command_Window
  def dispose_command_window
    @command_window.dispose
  end
  #Update Command_Window
  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
  #Update_Sacar_Selection
  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)
      @item = @sacar_objeto.item
      number = $game_party.item_number(@item)
      if @item == nil or number > 99
        Sound.play_buzzer
      else
        Sound.play_decision
        max = $game_system.item_guardados[@item]
        max = [max, 99 - number].min
        @sacar_objeto.active = false
        @sacar_objeto.visible = false
        @number_window.set(@item, max)
        @number_window.active = true
        @number_window.visible = true
      end
    end
  end
  #Update_Guardar_Selection
  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 = @guardar_objeto.item
      if @item == nil
        Sound.play_buzzer
      else
        Sound.play_decision
        max = $game_party.item_number(@item)
        @guardar_objeto.active = false
        @guardar_objeto.visible = false
        @number_window.set(@item, max)
        @number_window.active = true
        @number_window.visible = true
      end
    end
  end
  #Update_Number_Input
  def update_number_input
    if Input.trigger?(Input::B)
      cancel_number_input
    elsif Input.trigger?(Input::C)
      decide_number_input
    end
  end
  #Cancel_Number_Input
  def cancel_number_input
    Sound.play_cancel
    @number_window.active = false
    @number_window.visible = false
    case @command_window.index
    when 0 
      @guardar_objeto.active = true
      @guardar_objeto.visible = true
    when 1 
      @sacar_objeto.active = true
      @sacar_objeto.visible = true
    end
  end
  #Decide_Number_Input
  def decide_number_input
    Sound.play_shop
    @number_window.active = false
    @number_window.visible = false
    case @command_window.index
    when 0 
      if $game_system.item_guardados[@item].nil?
      $game_system.item_guardados[@item] = @number_window.number
      else
      $game_system.item_guardados[@item] += @number_window.number
      end
      $game_party.lose_item(@item, @number_window.number)
      @guardar_objeto.refresh
      @guardar_objeto.active = true
      @guardar_objeto.visible = true
    when 1
      $game_system.item_guardados[@item] -= @number_window.number
      $game_system.item_guardados.delete(@item) if $game_system.item_guardados[@item] == 0
      $game_party.gain_item(@item, @number_window.number)
      @sacar_objeto.refresh
      @sacar_objeto.active = true
      @sacar_objeto.visible = true
    end
  end
end

Bueno, esta script te permite guardar y sacar objetos, de todo tipos. Para usarla simplemente llamen a Scene_Storage en un comando llamar a evento o en otro Scene.
Aún quiero ir añadiéndole un par de cosas para mejorarla e ir aprendiendo. Así que puede que la modifique más a delante.
En caso de que la usen en sus proyectos no hace falta que den créditos y siéntanse libres de postearla donde quieran, pero eso sí no digan que es suya XD.
----------------------------------------------------------------------------------------------------------------------------------------------
Ya arreglé el fallo. Gracias a todos por comentar y a tomate por haber subido la screen.
----------------------------------------------------------------------------------------------------------------------------------------------
Vuelvo a editar, porque Orochii me ayudo a mejorar el script en MM y de pasó ya también lo pongo aquí en UM. Gracias Orichii



Última edición por rpgmanumaker el Mar Dic 25, 2012 5:55 pm, editado 3 veces (Razón : Arreglar el script y modificarlo)

#2 Re: Mi primera script. (almacén de objetos) el Lun Dic 24, 2012 2:11 pm

Tomate

avatar
¡Hola rpgmanumaker! ¿Cómo estás? Te cuento que muchos en realidad siguen con el VX, muchos de ellos por el sistema de batallas Takentai (o como se escriba) ya que en VX Ace aún no está traducido, también lo usan más porque hay más scripts...en fin, son muchas las razones y muchos los makeros que usan el VX Ópalo Contento
Por otro lado, te felicito por empezar a aprender RGSS, yo lo estaba haciendo, pero luego de una semana decidí no hacerlo más Ópalo Sonrisa Grande ¡Así que el hecho de que hayas posteado tu primer script ya es un logro importante! cheers
Con respecto al topic, quiero darte un pequeño consejito, en los foros de habla inglesa tienen un dicho (algo pegadizo Ópalo Sonrisa Grande ) llamado "no pics, no clicks" (sin imágenes, no hay clicks). Con esto quiero decir, que siempre que subas un script, es importante que adjuntes alguna imágen para que la gente tenga una idea visual de cómo funcionan esas tiras largas de códigos, y al mismo tiempo les servirá para distinguir si es lo que ellos buscan o no.
But, don't worry and be happy! Ópalo Sonrisa Grande Porque aquí pongo una screen que saqué yo al probar tu script Ópalo Sonriente

Sin embargo, debo decirte que me da un pequeño error...creo que tiene que ver con el ajuste de las coordenadas X e Y de la ventana, en la opción "Sacar" obtengo esto:

(De todas maneras me permite sacar los objetos). Y eso que el único script agregado era el tuyo, no crea que sea problemas de compatibilidad. Puedes empezar arreglando eso.
Quiero decir que me encanta tu script, así que sigue aprendiendo y enseñándonos todo tu potencial.
¡Saludos!

P/D: Para quienes no sepan como llamar un script desde el evento, se coloca esto:

#3 Re: Mi primera script. (almacén de objetos) el Lun Dic 24, 2012 3:09 pm

youkai

avatar
Ehhhmmm...manu?? Que has hecho con mi window?? T-T XDDDDD
Pero que querias hacer que la pobre termino asi?
(arregla, arregla: super(0, 56, 544, 360) )

Por cierto...no lo habia dicho....FELICIDADES POR TERMINAR TU PRIMER SCRIPT!!!!! Ópalo Contento Ópalo Contento En este te ayude yo, el que sigue seguro es tuyo por completo. Ópalo Contento

Saludos,
¥oukai

#4 Re: Mi primera script. (almacén de objetos) el Lun Dic 24, 2012 3:14 pm

FIGO

avatar

¡FELICITACIONES!
SIGUE TRABAJANDO ESOS CODIGOS!!
SALUDOS

FIGO

#5 Re: Mi primera script. (almacén de objetos) el Mar Dic 25, 2012 5:57 pm

rpgmanumaker

avatar
Para todos los que quieran el script, ya he arreglado el fallo que me indico tomate, lo he modificado un poco con partes del código que me dio orochii, así que ahora los objetos se muestran claros y no oscuros. (Antes las armas y armaduras se veían mñas oscuras que los items, ya no)

Contenido patrocinado


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.