¡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 [XP] New Shop System el Vie Feb 08, 2013 6:42 pm

youkai

avatar
Yo minna!...vengo a presentar un script inspirado por wecoc, en estos momentos aun esta en fase de desarrollo asi que lo que veran seria algo asi como una beta
Autor: yo-ukai xDD
Version: Alguna por debajo de 0
Screens....creanme que no vale la pena ponerlas, los cambios que hice son todos tecnicos, no he tocado casi para nada la parte visual

Modo de Uso:
Las tiendas tienen que ser predefinidas dentro del editor en cuanto a:
Dinero que poseen (Initial_Money)
Sus impuestos (Initial_Taxes)
Para esto tienen que poner esos valores en orden segun la ID de la tienda. Me explico:

Initial_Taxes = [1.2, 1.6, 0.5, 1.6, 1.4]
Initial_Money = [15600, 2156, 1200, 3000, 150]

Esto representa que la tienda de ID 0 tendra los impuestos en 1.2 y su dinero sera 15600, la que tenga ID 1, los numeros que siguen y asi con todas las ID hasta llegar al final. ES OBLIGADO TENER LA MISMA CANTIDAD DE VALORES EN AMBOS.

En cuanto al ID, eso se establece justo antes de llamar a la tienda por los comandos de evento:
Agregamos un comando Llamar Script y escribimos en el:
$game_temp.shop_id = 0 #Donde 0 es la ID
$game_temp.item_number = [10,26, 65, 35] #Donde cada numero debe ir en el mismo orden en que pongas despues los productos.

El script aun tiene sus problemillas que no he podido corregir(por vagancia xDD):
Cuando vuelves a abrir la tienda, la cantidad de items que tenia se reinicia(porque una vez mas le vuelves a dar los valores de items iniciales xD)
Y bueno es posible que aun se me haya escapado algun que otro bug.

Y sin mas que decir: Script:

Código:
module RPG
  class Shop
    attr_accessor  :tax_rate
    attr_accessor  :money
    def initialize
      @tax_rate = 1
      @money = 0
    end
  end
end

class Game_Temp
  attr_accessor  :shop_id
  attr_accessor  :item_number
  alias advance_shop_initialize initialize unless $@
  def initialize
    advance_shop_initialize
    @shop_id = 0
    @item_number = {}
  end
end

class Scene_Title
  Initial_Taxes = [1.2, 1.6, 0.5, 1.6, 1.4]
  Initial_Money = [15600, 2156, 1200, 3000, 150]
  alias advance_shop_main main unless $@
  def main
    make_shops
    advance_shop_main
  end
 
  def make_shops
    $data_shops = []
    for i in 0...1
      $data_shops[i] = RPG::Shop.new
      $data_shops[i].tax_rate = Initial_Taxes[i]
      $data_shops[i].money = Initial_Money[i]
    end
  end
end

#==============================================================================
# ** Window_Gold
#------------------------------------------------------------------------------
#  This window displays amount of gold.
#==============================================================================

class Window_ShopGold < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 64, 160, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    cx = contents.text_size($data_system.words.gold).width
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 120-cx-2, 32, $data_shops[$game_temp.shop_id].money.to_s, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(124-cx, 0, cx, 32, $data_system.words.gold, 2)
  end
end


#==============================================================================
# ** Window_ShopCommand
#------------------------------------------------------------------------------
#  This window is used to choose your business on the shop screen.
#==============================================================================

class Window_ShopCommand < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(160, 64, 320, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item_max = 3
    @column_max = 3
    @commands = ["Buy", "Sell", "Exit"]
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #    index : item number
  #--------------------------------------------------------------------------
  def draw_item(index)
    x = 4 + index * 106
    self.contents.draw_text(x, 0, 128, 32, @commands[index])
  end
end

#==============================================================================
# ** Window_ShopBuy
#------------------------------------------------------------------------------
#  This window displays buyable goods on the shop screen.
#==============================================================================

class Window_ShopBuy < Window_Selectable
  attr_accessor  :shop_goods
  #--------------------------------------------------------------------------
  # * Object Initialization
  #    shop_goods : goods
  #--------------------------------------------------------------------------
  def initialize(shop_goods)
    super(0, 128, 368, 352)
    @shop_goods = shop_goods
    @shop = $data_shops[$game_temp.shop_id]
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # * Item Acquisition
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
 
  def tax
    @shop.tax_rate
  end
 
  def kind(arg = nil)
    case !arg.nil? ? arg : item
    when RPG::Item
      0
    when RPG::Weapon
      1
    when RPG::Armor
      2
    end
  end
   
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for goods_item in @shop_goods.keys
      case goods_item[0]
      when 0
        item = $data_items[goods_item[1]].dup
      when 1
        item = $data_weapons[goods_item[1]].dup
      when 2
        item = $data_armors[goods_item[1]].dup
      end
      if item != nil
        item.price *= @shop.tax_rate; item.price = item.price.ceil
        @data.push(item)
      end
    end
    @data.each_index{|i|
    4.times {|n|
    if @shop_goods[[n, @data[i].id]] == 0
      @data.delete_at(i)
    end}}
    # If item count is not 0, make a bit map and draw all items
    @item_max = @data.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[index]
    # Get items in possession
    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 price is less than money in possession, and amount in possession is
    # not 99, then set to normal text color. Otherwise set to disabled color
    if item.price <= $game_party.gold and number < 99
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4
    y = index * 32
    number = @shop_goods[[kind(item), item.id]]
    rect = Rect.new(x, y, self.width - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.draw_text(x, y, 32, 32, number.to_s, 0)
    self.contents.blt(x + 32, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 60, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 88, 32, item.price.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # * Help Text Update
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end

#==============================================================================
# ** Window_ShopSell
#------------------------------------------------------------------------------
#  This window displays items in possession for selling on the shop screen.
#==============================================================================

class Window_ShopSell < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 128, 640, 352)
    @column_max = 2
    @shop = $data_shops[$game_temp.shop_id]
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # * Getting Items
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        @data.push($data_items[i].dup)
      end
    end
    for i in 1...$data_weapons.size
      if $game_party.weapon_number(i) > 0
        @data.push($data_weapons[i].dup)
      end
    end
    for i in 1...$data_armors.size
      if $game_party.armor_number(i) > 0
        @data.push($data_armors[i].dup)
      end
    end
    # If item count is not 0, make a bitmap and draw all items
    @item_max = @data.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[index]
    item.price /= 2
    item.price *= @shop.tax_rate
    item.price = item.price.to_i
    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 items are sellable, set to valid text color. If not, set to invalid
    # text color.
    if item.price > 0 and @shop.money >= item.price / 2 * @shop.tax_rate
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 2 * (288 + 32)
    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))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # * Help Text Update
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end


class Interpreter
  #--------------------------------------------------------------------------
  # * Shop Processing
  #--------------------------------------------------------------------------
  def command_302
    # Set battle abort flag
    $game_temp.battle_abort = true
    # Set shop calling flag
    $game_temp.shop_calling = true
    # Set goods list on new item
    cont = 0
    $game_temp.shop_goods = {@parameters => $game_temp.item_number[cont]}
    # Loop
    loop do
      # Advance index
      @index += 1
      # If next event command has shop on second line or after
      if @list[@index].code == 605
        cont += 1
        # Add goods list to new item
        $game_temp.shop_goods[@list[@index].parameters] = $game_temp.item_number[cont]
      # If event command does not have shop on second line or after
      else
        # End
        return false
      end
    end
  end
end

#==============================================================================
# ** Scene_Shop
#------------------------------------------------------------------------------
#  This class performs shop screen processing.
#==============================================================================

class Scene_Shop
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    # Make help window
    @help_window = Window_Help.new
    @shop = $data_shops[$game_temp.shop_id]
    # Make command window
    @command_window = Window_ShopCommand.new
    # Make gold window
    @gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 64
    @shop_gold_window = Window_ShopGold.new
    @shop_gold_window.x = 480
    # Make dummy window
    @dummy_window = Window_Base.new(0, 128, 640, 352)
    # Make buy window
    @buy_window = Window_ShopBuy.new($game_temp.shop_goods)
    @buy_window.active = false
    @buy_window.visible = false
    @buy_window.help_window = @help_window
    # Make sell window
    @sell_window = Window_ShopSell.new
    @sell_window.active = false
    @sell_window.visible = false
    @sell_window.help_window = @help_window
    # Make quantity input window
    @number_window = Window_ShopNumber.new
    @number_window.active = false
    @number_window.visible = false
    # Make status window
    @status_window = Window_ShopStatus.new
    @status_window.visible = false
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose of windows
    [@help_window, @command_window, @gold_window, @shop_gold_window,
    @dummy_window, @buy_window, @sell_window, @number_window,
    @status_window].each{|w| w.dispose}
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Update windows
    [@help_window, @command_window, @gold_window, @shop_gold_window,
    @dummy_window, @buy_window, @sell_window, @number_window,
    @status_window].each{|w| w.update}
    # If command window is active: call update_command
    if @command_window.active
      update_command
      return
    end
    # If buy window is active: call update_buy
    if @buy_window.active
      update_buy
      return
    end
    # If sell window is active: call update_sell
    if @sell_window.active
      update_sell
      return
    end
    # If quantity input window is active: call update_number
    if @number_window.active
      update_number
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when command window is active)
  #--------------------------------------------------------------------------
  def update_command
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Switch to map screen
      $scene = Scene_Map.new
      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
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Change windows to buy mode
        @command_window.active = false
        @dummy_window.visible = false
        @buy_window.active = true
        @buy_window.visible = true
        @buy_window.refresh
        @status_window.visible = true
      when 1  # sell
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Change windows to sell mode
        @command_window.active = false
        @dummy_window.visible = false
        @sell_window.active = true
        @sell_window.visible = true
        @sell_window.refresh
      when 2  # quit
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to map screen
        $scene = Scene_Map.new
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when buy window is active)
  #--------------------------------------------------------------------------
  def update_buy
    # Set status window item
    @status_window.item = @buy_window.item
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Change windows to initial mode
      @command_window.active = true
      @dummy_window.visible = true
      @buy_window.active = false
      @buy_window.visible = false
      @status_window.visible = false
      @status_window.item = nil
      # Erase help text
      @help_window.set_text("")
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Get item
      @item = @buy_window.item
      # If item is invalid, or price is higher than money possessed
      if @item == nil or @item.price > $game_party.gold
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Get items in possession count
      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 99 items are already in possession
      if number == 99
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Play decision SE
      $game_system.se_play($data_system.decision_se)
      # Calculate maximum amount possible to buy
      max = @item.price == 0 ? 99 : $game_party.gold / @item.price
      max = [max, 99 - number].min
      # Change windows to quantity input mode
      @buy_window.active = false
      @buy_window.visible = false
      @number_window.set(@item, max, @item.price)
      @number_window.active = true
      @number_window.visible = true
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when sell window is active)
  #--------------------------------------------------------------------------
  def update_sell
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Change windows to initial mode
      @command_window.active = true
      @dummy_window.visible = true
      @sell_window.active = false
      @sell_window.visible = false
      @status_window.item = nil
      # Erase help text
      @help_window.set_text("")
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Get item
      @item = @sell_window.item
      # Set status window item
      @status_window.item = @item
      # If item is invalid, or item price is 0 (unable to sell)
      if @item == nil or @item.price == 0 or @shop.money <= @item.price
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Play decision SE
      $game_system.se_play($data_system.decision_se)
      # Get items in possession count
      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
      # Maximum quanitity to sell = number of items in possession
      max = @item.price == 0 ? 99 : (@shop.money / @item.price).floor
      max = [max, 99].min
      # Change windows to quantity input mode
      @sell_window.active = false
      @sell_window.visible = false
      @number_window.set(@item, max, @item.price)
      @number_window.active = true
      @number_window.visible = true
      @status_window.visible = true
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when quantity input window is active)
  #--------------------------------------------------------------------------
  def update_number
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Set quantity input window to inactive / invisible
      @number_window.active = false
      @number_window.visible = false
      # Branch by command window cursor position
      case @command_window.index
      when 0  # buy
        # Change windows to buy mode
        @buy_window.active = true
        @buy_window.visible = true
      when 1  # sell
        # Change windows to sell mode
        @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)
      # Play shop SE
      $game_system.se_play($data_system.shop_se)
      # Set quantity input window to inactive / invisible
      @number_window.active = false
      @number_window.visible = false
      case @sell_window.item
      when RPG::Item
        type = 0
      when RPG::Weapon
        type = 1
      when RPG::Armor
        type = 2
      end
      # Branch by command window cursor position
      case @command_window.index
      when 0  # buy
        # Buy process
        $game_party.lose_gold(@number_window.number * @item.price)
        @shop.money += @number_window.number * @item.price
        @buy_window.shop_goods[[type, @buy_window.item.id]] -= @number_window.number
        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
        @gold_window.refresh
        @shop_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
        # Sell process
        $game_party.gain_gold(@number_window.number * @item.price)
        @shop.money -= @number_window.number * @item.price
        if @buy_window.shop_goods.include?([type, @sell_window.item.id])
          @buy_window.shop_goods[[type, @sell_window.item.id]] += @number_window.number
        else
          @buy_window.shop_goods[[type, @sell_window.item.id]] = @number_window.number
        end
        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
        @gold_window.refresh
        @shop_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

Saludos,
¥oukai

#2 Re: [XP] New Shop System el Dom Feb 10, 2013 7:49 pm

davidaikago

avatar
¿y que tiene de nuevo este tipo de tienda?

ya que para hacer un script de tienda, debe de tener algo nuevo

#3 Re: [XP] New Shop System el Dom Feb 10, 2013 11:55 pm

youkai

avatar
Sorry si no fui especifico o me salte esa parte XD
El script es para lo siguiente:

- Te permite definir impuestos para cada tienda de forma muy sencilla.
- Definir dinero para cada tienda.
- Definir los item y su respectiva cantidad que tendra cada tienda(aun en desarrollo, tiene bugs, cuando cierras la tienda se pierden los cambios).
- Si vendes items, estos se agregan a la lista de objetos de la tienda, con la respectiva cantidad que vendiste.
- Si la tienda se va quedando sin items va aumentando su precio y si tiene muchos baja el precio; en el caso de la venta, lo mismo pero inverso.(para la proxima version)

Ya eso es todo...si se les ocurre alguna otra feature para el script, diganla! XDD

Saludos,
¥oukai

#4 Re: [XP] New Shop System el Lun Feb 11, 2013 2:54 am

Cuervoso

avatar
Buen trabajo, Youkai. No recuerdo haber visto un script que cause un efecto parecido, más que nada porque no veo muchos scripts xD. Por cierto, me gustaría (por no decir exijo) que hagas una versión para la versión Vx Ace.

- Te permite definir impuestos para cada tienda de forma muy sencilla.
Claro, como si no estuviese arto de los impuestos en la vida real... Espero que el script haga que el gobierno utilice los impuestos para construir caminos en esos bosques místicos.
- Definir los item y su respectiva cantidad que tendra cada tienda(aun en desarrollo, tiene bugs, cuando cierras la tienda se pierden los cambios).
Bueno, podrías excusarte diciendo que los camiones que reponen los objetos son muy eficientes.
- Si la tienda se va quedando sin items va aumentando su precio y si tiene muchos baja el precio; en el caso de la venta, lo mismo pero inverso.(para la proxima version)
¿Y las tiendas no van recuperando su "stock" concorde pase el tiempo? D:

Saludos.

PD: Felicidades Youkai, felicidades: has dejado detenido el juego de Pictionary en el foro de Off-Topic, espero que te sientas a gusto >=(.






Cuervoso! No te pases ¬_¬

#5 Re: [XP] New Shop System el Lun Feb 11, 2013 5:51 am

youkai

avatar
SHIT!! Se me habia olvidado!!!! O.O Ya puse la nueva foto, gracias Reaven, por recordarmelo XDD Es que son demasiadas cosas a la vez...u.u

Por cierto, me gustaría (por no decir exijo) que hagas una versión para la versión Vx Ace.
Ok, preparo una version para todos los makers entonces XD

¿Y las tiendas no van recuperando su "stock" concorde pase el tiempo? D:

Si lo haran, pero a medida que vayas comprando/vendiendo en un momento determinado, los precios iran fluctuando.

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.