¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3397 miembros registrados.
El último usuario registrado es LucasGF.

Nuestros miembros han publicado un total de 79808 mensajes en 11257 argumentos.
Navega con Google Chrome
[DESCARGA]

Window_ShopNumber con Input Number

 :: RPG Maker :: Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP Window_ShopNumber con Input Number

Mensaje por Pokepik el 2012-06-17, 16:24

A partir de una idea que tuve y que ya posteé se me ocurrió otra idea que sí supe hacer. Window_ShopNumber con Input Number. Creo que el título ya lo dice todo. Aún así pongo una screen para que se vea como es.

Spoiler:


Código:
#==============================================================================
# ** Window_ShopNumber con Input Number
#------------------------------------------------------------------------------
# by: Pokepik
#==============================================================================

class Window_ShopNumber < Window_Base
  def initialize
    super(0, 128, 368, 352)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item = nil
    @max = 1
    @price = 0
    @number = 1
    @digits_max = 2
    dummy_bitmap = Bitmap.new(32, 32)
    @cursor_width = dummy_bitmap.text_size("0").width + 8
    dummy_bitmap.dispose
    @index = 0
    update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # * Set Items, Max Quantity, and Price
  #--------------------------------------------------------------------------
  def set(item, max, price)
    @item = item
    @max = max
    @price = price
    @number = 1
    refresh
  end
  #--------------------------------------------------------------------------
  # * Set Inputted Quantity
  #--------------------------------------------------------------------------
  def number
    return @number
  end
  def number=(number)
    @number = [[number, 1].max, 10 ** @digits_max - 1].min
    refresh
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    self.cursor_rect.set((@index * @cursor_width)+290, 96, @cursor_width, 32)
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_item_name(@item, 4, 96)
   
    if @number <= @max
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
   
    s = sprintf("%0*d", @digits_max, @number)
    for i in 0...@digits_max
      self.contents.draw_text((i * @cursor_width + 4)+290, 96, 32, 32, s[i,1])
    end
   
    self.contents.font.color = normal_color
    self.contents.draw_text(268, 96, 32, 32, "×")
    # Draw total price and currency units
    domination = $data_system.words.gold
    cx = contents.text_size(domination).width
    total_price = @price * @number
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 160, 328-cx-2, 32, total_price.to_s, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(332-cx, 160, cx, 32, domination, 2)
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    if self.active
      # Cursor right (+1)
      if Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN)
        $game_system.se_play($data_system.cursor_se)
        # Get current place number and change it to 0
        place = 10 ** (1 - @index)
        n = @number / place % 10
        @number -= n * place
        # If up add 1, if down substract 1
        n = (n + 1) % 10 if Input.repeat?(Input::UP)
        n = (n + 9) % 10 if Input.repeat?(Input::DOWN)
        # Reset current place number
        @number += n * place
        refresh
      end
      if Input.repeat?(Input::RIGHT)
        $game_system.se_play($data_system.cursor_se)
        @index = (@index + 1) % @digits_max
      end
      if Input.repeat?(Input::LEFT)
        $game_system.se_play($data_system.cursor_se)
        @index = (@index + @digits_max - 1) % @digits_max
      end
      update_cursor_rect
    end
  end 
end

#==============================================================================
# ** Scene_Shop
#==============================================================================

class Scene_Shop
  def update_number
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @number_window.active = false
      @number_window.visible = false
      case @command_window.index
      when 0  # buy
        @buy_window.active = true
        @buy_window.visible = true
      when 1  # sell
        @sell_window.active = true
        @sell_window.visible = true
        @status_window.visible = false
      end
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Branch by command window cursor position
      case @command_window.index
      when 0  # buy
        if (@number_window.number * @item.price) > $game_party.gold
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        case @item
        when RPG::Item
          number = $game_party.item_number(@item.id)
        when RPG::Weapon
          number = $game_party.weapon_number(@item.id)
        when RPG::Armor
          number = $game_party.armor_number(@item.id)
        end
        if @number_window.number + number > 99
          $game_system.se_play($data_system.buzzer_se)
          return
        end 
        if @number_window.number == 0
          $game_system.se_play($data_system.cancel_se)
          @number_window.active = false
          @number_window.visible = false
         
          @gold_window.refresh
          @buy_window.refresh
          @status_window.refresh
          @buy_window.active = true
          @buy_window.visible = true
          return
        end
     
        $game_system.se_play($data_system.shop_se)
        $game_party.lose_gold(@number_window.number * @item.price)
        case @item
        when RPG::Item
          $game_party.gain_item(@item.id, @number_window.number)
        when RPG::Weapon
          $game_party.gain_weapon(@item.id, @number_window.number)
        when RPG::Armor
          $game_party.gain_armor(@item.id, @number_window.number)
        end
        # Refresh each window
        @number_window.active = false
        @number_window.visible = false
       
        @gold_window.refresh
        @buy_window.refresh
        @status_window.refresh
        # Change windows to buy mode
        @buy_window.active = true
        @buy_window.visible = true
      when 1  # sell
        case @item
        when RPG::Item
          number = $game_party.item_number(@item.id)
        when RPG::Weapon
          number = $game_party.weapon_number(@item.id)
        when RPG::Armor
          number = $game_party.armor_number(@item.id)
        end
        if @number_window.number > number
          $game_system.se_play($data_system.buzzer_se)
          return
        end 
        if @number_window.number == 0
          $game_system.se_play($data_system.cancel_se)
          @number_window.active = false
          @number_window.visible = false
 
          @gold_window.refresh
          @sell_window.refresh
          @status_window.refresh
          @sell_window.active = true
          @sell_window.visible = true
          @status_window.visible = false
          return
        end
        # Sell process
        $game_system.se_play($data_system.shop_se)
        $game_party.gain_gold(@number_window.number * (@item.price / 2))
        case @item
        when RPG::Item
          $game_party.lose_item(@item.id, @number_window.number)
        when RPG::Weapon
          $game_party.lose_weapon(@item.id, @number_window.number)
        when RPG::Armor
          $game_party.lose_armor(@item.id, @number_window.number)
        end
        # Refresh each window
        @number_window.active = false
        @number_window.visible = false

        @gold_window.refresh
        @sell_window.refresh
        @status_window.refresh
        # Change windows to sell mode
        @sell_window.active = true
        @sell_window.visible = true
        @status_window.visible = false
      end
      return
    end
  end
end

Nota: Lo subí antes pero se me colgó o pasó algo raro no sé. Da igual.

Pokepik
Principiante
Principiante

0/3

Créditos 1834

Gracias : 4

Volver arriba Ir abajo

RPG Maker XP Re: Window_ShopNumber con Input Number

Mensaje por orochii el 2012-06-17, 21:33

Creo que queda más comodo así, o al menos en caso que uno quiera poner límites de objetos descabellados xD (por default creo se pueden subir decenas con otro botón, pero en fin).
Buen script Ppik C:.

Salut,
Orochii Zouveleki

orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6045

Gracias : 266

http://drekirokr.weebly.com/

Volver arriba Ir abajo

RPG Maker XP Re: Window_ShopNumber con Input Number

Mensaje por Ripher el 2012-12-20, 06:25

Hola
Como duda,
se puede colocar el marcador de la decena, primeramente
en la unidad?
es mas rapido y comun comprar una o dos armas, que 10 o 20 armas por ejemplo.

Saludos.

Ripher
Novato
Novato

0/3

Créditos 60

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: Window_ShopNumber con Input Number

Mensaje por orochii el 2012-12-20, 07:40

Busca esta línea al puro comienzo del script
Código:
@index = 0
Y pónle un 1, así xD:
Código:
@index = 1

Eso debería funcionar,
Orochii Zouveleki sleepyMODE

PD.: BTW, qué buen avatar el tuyo Ripher xD!!!.

orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6045

Gracias : 266

http://drekirokr.weebly.com/

Volver arriba Ir abajo

RPG Maker XP Re: Window_ShopNumber con Input Number

Mensaje por Ripher el 2012-12-21, 07:37

orochii escribió:

PD.: BTW, qué buen avatar el tuyo Ripher xD!!!.


Jejeje gracias, Gaudy es lo maximo!
desde mi infancia que era mi idolo XD

PD: Gracias por el dato del index en el script

Ripher
Novato
Novato

0/3

Créditos 60

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: Window_ShopNumber con Input Number

Mensaje por Contenido patrocinado Hoy a las 12:39


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 :: RPG Maker :: Scripts

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