Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

【VX release】The store purchase

This is one for the store to purchase the script, function as I said just now, when you go into a store will determine your belongings, if the number of items to the limit, so congratulations you, you can't buy this kind of goods.

Method of use: directly replace the first script "shop" system script, then second scripts are independent, the number is limited, read equipment well, now you can note in the remarks column in a number of items, such as bombs? A person can only carry one?

By the way, Amy knows there are other game forum? One of my foreign friends he was studying in Berlin, he once told me that he had a great game in the UK production of the forum, but I don't know where to

Code:
#==============================================================================

# ■ Scene_Shop

#------------------------------------------------------------------------------

#  处理商店画面的类。

#==============================================================================

 

class Scene_Shop < Scene_Base

  #--------------------------------------------------------------------------

  # ● 开始处理

  #--------------------------------------------------------------------------

  def start

    super

    create_menu_background

    create_command_window

    @help_window = Window_Help.new

    @gold_window = Window_Gold.new(384, 56)

    @dummy_window = Window_Base.new(0, 112, 544, 304)

    @buy_window = Window_ShopBuy.new(0, 112)

    @buy_window.active = false

    @buy_window.visible = false

    @buy_window.help_window = @help_window

    @sell_window = Window_ShopSell.new(0, 112, 544, 304)

    @sell_window.active = false

    @sell_window.visible = false

    @sell_window.help_window = @help_window

    @number_window = Window_ShopNumber.new(0, 112)

    @number_window.active = false

    @number_window.visible = false

    @status_window = Window_ShopStatus.new(304, 112)

    @status_window.visible = false

  end

  #--------------------------------------------------------------------------

  # ● 结束处理

  #--------------------------------------------------------------------------

  def terminate

    super

    dispose_menu_background

    dispose_command_window

    @help_window.dispose

    @gold_window.dispose

    @dummy_window.dispose

    @buy_window.dispose

    @sell_window.dispose

    @number_window.dispose

    @status_window.dispose

  end

  #--------------------------------------------------------------------------

  # ● 更新画面

  #--------------------------------------------------------------------------

  def update

    super

    update_menu_background

    @help_window.update

    @command_window.update

    @gold_window.update

    @dummy_window.update

    @buy_window.update

    @sell_window.update

    @number_window.update

    @status_window.update

    if @command_window.active

      update_command_selection

    elsif @buy_window.active

      update_buy_selection

    elsif @sell_window.active

      update_sell_selection

    elsif @number_window.active

      update_number_input

    end

  end

  #--------------------------------------------------------------------------

  # ● 生成命令窗口

  #--------------------------------------------------------------------------

  def create_command_window

    s1 = Vocab::ShopBuy

    s2 = Vocab::ShopSell

    s3 = Vocab::ShopCancel

    @command_window = Window_Command.new(384, [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

        @buy_window.active = true

        @buy_window.visible = true

        @buy_window.refresh

        @status_window.visible = true

      when 1  # 卖出

        if $game_temp.shop_purchase_only

          Sound.play_buzzer

        else

          Sound.play_decision

          @command_window.active = false

          @dummy_window.visible = false

          @sell_window.active = true

          @sell_window.visible = true

          @sell_window.refresh

        end

      when 2  # 离开

        Sound.play_decision

        $scene = Scene_Map.new

      end

    end

  end

  #--------------------------------------------------------------------------

  # ● 更新买入选择

  #--------------------------------------------------------------------------

  def update_buy_selection

    @status_window.item = @buy_window.item

    if Input.trigger?(Input::B)

      Sound.play_cancel

      @command_window.active = true

      @dummy_window.visible = true

      @buy_window.active = false

      @buy_window.visible = false

      @status_window.visible = false

      @status_window.item = nil

      @help_window.set_text("")

      return

    end

    if Input.trigger?(Input::C)

      @item = @buy_window.item

      number = $game_party.item_number(@item)

      if @item == nil or @item.price > $game_party.gold or

       number == ITEM_CAP::LIMIT

        Sound.play_buzzer

      else

        Sound.play_decision

        max = @item.price == 0 ? @item.item_cap : $game_party.gold / @item.price

        max = [max, ITEM_CAP::LIMIT - number].min

        @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

  end

  #--------------------------------------------------------------------------

  # ● 更新卖出选择

  #--------------------------------------------------------------------------

  def update_sell_selection

    if Input.trigger?(Input::B)

      Sound.play_cancel

      @command_window.active = true

      @dummy_window.visible = true

      @sell_window.active = false

      @sell_window.visible = false

      @status_window.item = nil

      @help_window.set_text("")

    elsif Input.trigger?(Input::C)

      @item = @sell_window.item

      @status_window.item = @item

      if @item == nil or @item.price == 0

        Sound.play_buzzer

      else

        Sound.play_decision

        max = $game_party.item_number(@item)

        @sell_window.active = false

        @sell_window.visible = false

        @number_window.set(@item, max, @item.price / 2)

        @number_window.active = true

        @number_window.visible = true

        @status_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  # 买入

      @buy_window.active = true

      @buy_window.visible = true

    when 1  # 卖出

      @sell_window.active = true

      @sell_window.visible = true

      @status_window.visible = false

    end

  end

  #--------------------------------------------------------------------------

  # ● 确认数值输入

  #--------------------------------------------------------------------------

  def decide_number_input

    Sound.play_shop

    @number_window.active = false

    @number_window.visible = false

    case @command_window.index

    when 0  # 买入

      $game_party.lose_gold(@number_window.number * @item.price)

      $game_party.gain_item(@item, @number_window.number)

      @gold_window.refresh

      @buy_window.refresh

      @status_window.refresh

      @buy_window.active = true

      @buy_window.visible = true

    when 1  # 卖出

      $game_party.gain_gold(@number_window.number * (@item.price / 2))

      $game_party.lose_item(@item, @number_window.number)

      @gold_window.refresh

      @sell_window.refresh

      @status_window.refresh

      @sell_window.active = true

      @sell_window.visible = true

      @status_window.visible = false

    end

  end

end

 

Code:
module ITEM_CAP

  TEXT = ": %s / %s"

  LIMIT = 20#购买上限

end
 
This is neat, I can imagine item caps being useful in a lot of games. (Surprised it was never a feature in RM to begin with to be honest).
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top