设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2194|回复: 2
打印 上一主题 下一主题

[已经过期] 【求助】VX物品貨幣商店腳本 求轉VA

[复制链接]

Lv1.梦旅人

梦石
0
星屑
144
在线时间
139 小时
注册时间
2009-11-30
帖子
45
跳转到指定楼层
1
发表于 2012-11-13 19:34:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Mic_洛洛 于 2012-11-14 18:16 编辑
#==============================================================================
# ** ExCommand_BarterShop ~ Item Version of Exchange Shop ~ (MACKIE)
#------------------------------------------------------------------------------
#  This script allows you to exchange specific items, such as "coins" or
# "medals," for other items when running [Shop Processing].
#==============================================================================

# The ID of the switch used to enable the exchange shop.
# When set to ON, [Shop Processing] will replace the regular shop with the
# exchange shop ("Purchase Only" is also available here). This switch is turned
# OFF automatically after the player is finished shopping.
EXCMD_BTRSHOP_SID = 26

# Exchange shop command names.
# From left to right: [Buy] [Sell] [Finished]
EXCMD_BTRSHOP_VOCAB = ["Exchange", "Sell", "Finished"]

# The exchange "item" used by the exchange shop.
# Specify the item representing shop "credits" here.
# Format is [Item ID, term for "credits", exchange rate]
# Item price = original price ÷ exchange rate, rounded to 1.
# (Example) If the exchange rate is 100, and an item costs 1650G normally, you
#           will need to exchange 17 "credits" (100G each) to obtain the item.
EXCMD_BTRSHOP_ITEM = [31, "A", 100]

# Notebox string identifier for specifying a product's exchange rate.
# Items without this designation will use the default exchange rate above.
# (For more information, see below)
EXCMD_BTRSHOP_SIGNATURE = "*BARTER_RATE"

# The ID of the variable that will store the shop identification number.
# When an ID is assigned to this variable, [Shop Processing] will adjust the
# exchange rate set per item, per shop. This way, it is possible for the same
# item to have separate rates at each shop. (For more information, see below)
EXCMD_BTRSHOP_VID = 11

# * Setting the exchange rate of items:
# Format is "EXCMD_BTRSHOP_SIGNATURE [exchange rate] [shop ID: exchange rate]"
# "|" acts aa a separator for each shop ID - exchange rate pairing.
# (Example 1) *BARTER_RATE[20] => the item's exchange rate is 20.
# (Example 2) *BARTER_RATE[1:20|2:15|3:25] => the item's exchange rate is
#             20 in shop 1, 15 in shop 2, and 25 in shop 3
# (Example 3) *BARTER_RATE[20][2:10|3:15] => the item's exchange rate is
#             10 in shop 2, 15 in shop 3, and 20 anywhere else.
#
# Priority is set as follows: shop ID rate > item rate > default shop rate

# * Event procedure for creating the exchange shop:
# 1) Set the exchange rate for individual items, if necessary.
# 2) To create an exchange shop, run the following operations:
#   * Control Switches: [EXCMD_BTRSHOP_SID] = ON
#   * Control Variables: [EXCMD_BTRSHOP_VID] = exchange shop ID (if used)
#   * [Shop Processing...] (select items)

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

class Game_Party
  #--------------------------------------------------------------------------
  # * Get Exchange Item
  #--------------------------------------------------------------------------
  def barter_item
    return $data_items[EXCMD_BTRSHOP_ITEM[0]]
  end
  #--------------------------------------------------------------------------
  # * Get Exchange Item Number
  #--------------------------------------------------------------------------
  def barter_item_number
    return $game_party.item_number(barter_item)
  end
  #--------------------------------------------------------------------------
  # * Get Exchange Rate
  #--------------------------------------------------------------------------
  def barter_rate(item)
    rate = 0
    shop_id = $game_variables[EXCMD_BTRSHOP_VID]
    sig = EXCMD_BTRSHOP_SIGNATURE
    reg = /#{Regexp.quote sig}(?:\[\d+\])?\[((\d+:\d+\|?)+)\]/
    note = item.note.clone
    note.gsub!(/\r\n/, "")
    if shop_id > 0 and note.scan(reg).to_a[0]
      for s in $~[1].split(/\s*\|\s*/)
        r = s.split(/\s*:\s*/)
        rate = r[1].to_i if r[0].to_i == shop_id
        break if rate > 0
      end
    end
    if rate == 0
      if note[/#{Regexp.quote sig}\[(\d+)\]/].to_a[0]
        rate = $1.to_i
      else
        rate = (item.price / EXCMD_BTRSHOP_ITEM[2]).round
      end
    end
    return rate > 0 ? rate : 1
  end
end

class Window_Base
  alias _excbshop_initialize initialize unless $@
  #--------------------------------------------------------------------------
  # * Object Initialization (Definition added)
  #     x      : window x-coordinate
  #     y      : window y-coordinate
  #     width  : window width
  #     height : window height
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    _excbshop_initialize(x, y, width, height)
    self.currency = Vocab::gold
  end
  #--------------------------------------------------------------------------
  # * Set Currency
  #--------------------------------------------------------------------------
  def currency=(currency)
    @currency = currency
  end
  #--------------------------------------------------------------------------
  # * Determine if the Currency Value is Gold
  #--------------------------------------------------------------------------
  def gold?
    return @currency == Vocab::gold
  end
  #--------------------------------------------------------------------------
  # * Draw number with currency unit (Redefined)
  #     value : Number (gold, etc)
  #     x     : draw spot x-coordinate
  #     y     : draw spot y-coordinate
  #     width : Width
  #--------------------------------------------------------------------------
  def draw_currency_value(value, x, y, width)
    cx = contents.text_size(@currency).width
    self.contents.font.color = normal_color
    self.contents.draw_text(x, y, width - cx - 2, WLH, value, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, width, WLH, @currency, 2)
  end
end

class Window_Gold
  alias _excbshop_refresh refresh unless $@
  #--------------------------------------------------------------------------
  # * Refresh (Definition added)
  #--------------------------------------------------------------------------
  def refresh
    _excbshop_refresh
    if $game_switches[EXCMD_BTRSHOP_SID]
      self.contents.clear
      value = gold? ? $game_party.gold : $game_party.barter_item_number
      draw_currency_value(value, 4, 0, 120)
    end
  end
end

class Window_ShopBuy
  alias _excbshop_refresh refresh unless $@
  alias _excbshop_draw_item draw_item unless $@
  #--------------------------------------------------------------------------
  # * Refresh (Definition added)
  #--------------------------------------------------------------------------
  def refresh
    unless $game_switches[EXCMD_BTRSHOP_SID]
      _excbshop_refresh
    else
      @data = []
      for goods_item in @shop_goods
        case goods_item[0]
        when 0
          item = $data_items[goods_item[1]]
        when 1
          item = $data_weapons[goods_item[1]]
        when 2
          item = $data_armors[goods_item[1]]
        end
        if item != nil and item != $game_party.barter_item # No exchange items
          @data.push(item)
        end
      end
      @item_max = @data.size
      create_contents
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Item (Definition added)
  #     index : item number
  #--------------------------------------------------------------------------
  def draw_item(index)
    unless $game_switches[EXCMD_BTRSHOP_SID]
      _excbshop_draw_item(index)
    else
      item = @data[index]
      number = $game_party.item_number(item)
      barter_number = $game_party.barter_item_number
      barter_rate = $game_party.barter_rate(item)
      enabled = (barter_rate <= barter_number and number < 99)
      rect = item_rect(index)
      self.contents.clear_rect(rect)
      draw_item_name(item, rect.x, rect.y, enabled)
      rect.width -= 4
      self.contents.draw_text(rect, barter_rate, 2)
    end
  end
end

class Scene_Shop
  alias _excbshop_start start unless $@
  alias _excbshop_terminate terminate unless $@
  alias _excbshop_create_command_window create_command_window unless $@
  alias _excbshop_update_command_selection update_command_selection unless $@
  alias _excbshop_update_buy_selection update_buy_selection unless $@
  alias _excbshop_update_sell_selection update_sell_selection unless $@
  alias _excbshop_decide_number_input decide_number_input unless $@
  #--------------------------------------------------------------------------
  # * Determine if this is an Exchange Shop
  #--------------------------------------------------------------------------
  def barter?
    return $game_switches[EXCMD_BTRSHOP_SID]
  end
  #--------------------------------------------------------------------------
  # * Start processing (Redefined)
  #--------------------------------------------------------------------------
  def start
    _excbshop_start
    if barter?
      @gold_window.currency = EXCMD_BTRSHOP_ITEM[1]
      @number_window.currency = EXCMD_BTRSHOP_ITEM[1]
      @gold_window.refresh
    end
  end
  #--------------------------------------------------------------------------
  # * Termination Processing (Definition added)
  #--------------------------------------------------------------------------
  def terminate
    _excbshop_terminate
    $game_switches[EXCMD_BTRSHOP_SID] = false
  end
  #--------------------------------------------------------------------------
  # * Create Command Window (Definition added)
  #--------------------------------------------------------------------------
  def create_command_window
    unless barter?
      _excbshop_create_command_window
    else
      s1 = EXCMD_BTRSHOP_VOCAB[0]
      s2 = EXCMD_BTRSHOP_VOCAB[1]
      s3 = EXCMD_BTRSHOP_VOCAB[2]
      @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
  end
  #--------------------------------------------------------------------------
  # * Update Command Selection (Definition added)
  #--------------------------------------------------------------------------
  def update_command_selection
    _excbshop_update_command_selection
    if Input.trigger?(Input::C) and barter?
      unless $game_temp.shop_purchase_only
        if @command_window.index == 1 # 売却する
          @gold_window.currency = Vocab::gold
          @number_window.currency = Vocab::gold
          @gold_window.refresh
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Update Buy Item Selection (Definition added)
  #--------------------------------------------------------------------------
  def update_buy_selection
    unless barter?
      _excbshop_update_buy_selection
    else
      @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
        barter_number = $game_party.barter_item_number
        barter_rate = $game_party.barter_rate(@item)
        number = $game_party.item_number(@item)
        if @item == nil or barter_rate > barter_number or number == 99
          Sound.play_buzzer
        else
          Sound.play_decision
          max = barter_number / barter_rate
          max = [max, 99 - number].min
          @buy_window.active = false
          @buy_window.visible = false
          @number_window.set(@item, max, barter_rate)
          @number_window.active = true
          @number_window.visible = true
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Update Sell Item Selection (Definition added)
  #--------------------------------------------------------------------------
  def update_sell_selection
    _excbshop_update_sell_selection
    if Input.trigger?(Input::B) and barter?
      @gold_window.currency = EXCMD_BTRSHOP_ITEM[1]
      @number_window.currency = EXCMD_BTRSHOP_ITEM[1]
      @gold_window.refresh
    end
  end
  #--------------------------------------------------------------------------
  # * Confirm Number Input (Definition added)
  #--------------------------------------------------------------------------
  def decide_number_input
    unless barter?
      _excbshop_decide_number_input
    else
      Sound.play_shop
      @number_window.active = false
      @number_window.visible = false
      barter_rate = $game_party.barter_rate(@item)
      number = @number_window.number
      case @command_window.index
      when 0  # Buy (Exchange)
        $game_party.lose_item($game_party.barter_item, number * barter_rate)
        $game_party.gain_item(@item, number)
        @gold_window.refresh
        @buy_window.refresh
        @status_window.refresh
        @buy_window.active = true
        @buy_window.visible = true
      when 1  # Sell
        $game_party.gain_gold(number * (@item.price / 2))
        $game_party.lose_item(@item, 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
end


以上是腳本

Lv1.梦旅人

梦石
0
星屑
105
在线时间
110 小时
注册时间
2012-11-14
帖子
57
2
发表于 2012-11-19 12:40:19 | 只看该作者
仓库.zip (319.74 KB, 下载次数: 86) 这不是么。
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
144
在线时间
139 小时
注册时间
2009-11-30
帖子
45
3
 楼主| 发表于 2012-11-19 19:16:27 | 只看该作者
這個根本完全不一樣耶... 你給的是倉庫 可是腳本是商店...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-8 16:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表