| 赞 | 0  | 
 
| VIP | 0 | 
 
| 好人卡 | 0 | 
 
| 积分 | 1 | 
 
| 经验 | 1141 | 
 
| 最后登录 | 2013-10-4 | 
 
| 在线时间 | 38 小时 | 
 
 
 
 
 
Lv1.梦旅人 
	- 梦石
 - 0 
 
        - 星屑
 - 50 
 
        - 在线时间
 - 38 小时
 
        - 注册时间
 - 2013-6-22
 
        - 帖子
 - 64
 
 
 
 | 
	
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员  
 
x
 
下面这个多货币脚本怎么用啊? 
 
 
 
 
 
 
 
 
 
 
 
module Currency 
#============================================================================== 
#                            设定部分 
#============================================================================== 
 
  # 货币名称 -- 在金钱窗口里使用 
  @name = ["金",   "银",   "币",   "款",   "汇"] 
   
   
  # 货币名称 -- 在商店里选择时使用 
  @iname =["金币", "银币", "铜币", "存款", "汇票"] 
   
   
  # 货币汇率 -- 计算价钱用 
  @rate = [ 1,     0.5,    0.25,   1,      1] 
   
  # 无法使用的货币 
  @cannot_use =  [3, 4] 
   
  # 不在金钱窗口显示的货币 
  @do_not_show = [4] 
   
  # 货币文字 -- 商店画面选项理所显示的文字 
  def self.word 
    return "选择货币" 
  end 
     
  # 只能用特定货币购买时显示的文字 
    # %s代表该货币 
  One_Currency = "只能用%s来购买!" 
   
   
  # 金钱窗口设置:是否在菜单显示新的金钱窗口 
  SHOW_NEW_CURRENCY = true 
   
#============================================================================== 
#  设定部分结束 
#============================================================================== 
#============================================================================== 
#                            使用方法 
#============================================================================== 
=begin 
  在事件中使用脚本: 
    gain_currency(类型, 数量)增加该类型货币 
    lose_currency(类型, 数量)减少该类型货币 
     
    convert(类型, 变量ID) 将该变量内的数值转换为该类型并返回 
    currency_type(类型, 变量ID) 将该类型货币金额代入该变量 
 
    在物品(武器、防具亦可,技能尚未测试)的备注栏打上 
              [currency 类型] 
    则该物品只能使用该类型货币购买 
 
    在物品(武器、防具亦可,技能尚未测试)的备注栏打上 
              [n_currency 类型] 
    则该物品只能使用该类型以外的货币购买 
 
    两个同时定义时,会互相抵销 
    (例如:同一个物品同时定义了[currency 1] 和[n_currency 1] 
      也就是同时「只能使用1号货币」和「只能除用除1号以外的货币」 
      那麽就变成了全部都能使用) 
 
    类型为数字代号,就是在脚本中所设定好的顺序(从0开始算) 
    0为默认金钱(直接用事件命令就行了) 
     
    ☆只能用特定货币购买的商店 设定方法 
    在召唤商店画面的NPC事件指令内容使用: 
     
    脚本:$special_currency = n # <== n 为货币类型 
    商店处理:商品列表 
    脚本:call_new_shop 
     
    设定後,该商店的「货币选择」选项无效 
     
=end 
#============================================================================== 
#  使用方法结束 
#============================================================================== 
  attr_accessor :name 
  attr_accessor :rate 
  def self.get_g_rate(i) 
    if  $game_party.gold != 0 
      p = @rate * $game_party.gold 
      return p.to_i == 0? 1 : p.to_i 
    else 
      return 0 
    end 
  end 
  def self.get_n_rate(i, number) 
    if  number != 0 
      p = @rate * number 
      return p.to_i == 0? 1 : p.to_i 
    else 
      return 0 
    end 
  end 
  def self.number 
    return @name.size 
  end 
  def self.name(i) 
    return @name 
  end 
  def self.id(i) 
    return @iname 
  end 
  def self.show?(id) 
    return !(@do_not_show.include?(id)) 
  end 
  def self.can_use?(id, item=nil) 
    return false if @cannot_use.include?(id) 
    unless item == nil 
      if item.get_currency_use != nil 
        return true if item.get_currency_use.include?(id) 
      elsif item.get_currency_not_use != nil 
        return false if item.get_currency_not_use.include?(id) 
      else return true 
      end 
    else return true 
    end 
  end 
end 
class Game_Party < Game_Unit 
  attr_accessor   :curr 
  alias c_ini initialize 
  def initialize 
    c_ini 
    @curr = [] 
    for i in 0...Currency.number 
      if @curr == nil 
        @curr = 0 
      end 
    end 
    @curr[0] = @gold 
  end 
  # 获得和失去金钱 
  def gain_curr(type, amount) 
    @curr[type] = [[@curr[type] + amount, 0].max, 9999999].min 
    @gold = @curr[0] 
  end 
  def lose_curr(type, amount) 
    gain_curr(type, -amount) 
  end 
  def gain_gold(n) 
    gain_curr(0, n) 
  end 
  def curr(n) 
    return @curr[n] == nil ? 0 : @curr[n] 
  end 
end 
 
class Game_Interpreter 
  # 获取货币 
  def gain_currency(type, amount) 
    $game_party.gain_curr(type, amount) 
  end 
  # 失去货币 
  def lose_currency(type, amount) 
    $game_party.lose_curr(type, amount) 
  end 
  # 货币兑换 
  def convert(type, vid) 
    return Currency.get_n_rate(type, $game_variables[vid]) 
  end 
  # 获取货币持有量 
  def currency_type(type, vid) 
    $game_variables[vid] = $game_party.curr(type) 
  end 
  # 召唤商店画面 
  alias old_command_302 command_302 
  def command_302 
    if $special_shop != -1 
      $game_temp.shop_goods = [@params] 
      $game_temp.shop_purchase_only = @params[2] 
      loop do 
        @index += 1 
        if @list[@index].code == 605 
          $game_temp.shop_goods.push(@list[@index].parameters) 
        else 
          return false 
        end 
      end 
    else  
      old_command_302 
    end 
  end 
  def call_new_shop 
    $scene = Scene_Shop.new($special_shop) 
    $special_shop = -1 
  end 
end 
class Scene_Menu < Scene_Base 
  alias c_menu_start start 
  def start 
    c_menu_start 
    if Currency::SHOW_NEW_CURRENCY 
      @gold_window.dispose 
      @gold_window = Window_SGold.new(0, 0) 
      @gold_window.y = 416-@gold_window.height 
    end 
  end 
end 
class RPG::BaseItem 
  def get_currency_use 
    e = [] 
    self.note.split(/[\r\n]+/).each { |line| 
      if line =~ /\[currency \d+\]/ 
        a = line.split(/ /)[1] 
        d = "" 
        while ((c = a.slice!(/./m)) != nil) 
          d += c if c != ">" 
        end 
        e.push(d.to_i) 
      end 
    } 
    return e==[] ? nil : e 
  end 
  def get_currency_not_use 
    e = [] 
    self.note.split(/[\r\n]+/).each { |line| 
      if line =~ /\[ncurrency \d+\]/ 
        a = line.split(/ /)[1] 
        d = "" 
        while ((c = a.slice!(/./m)) != nil) 
          d += c if c != ">" 
        end 
        e.push(d.to_i) 
      end 
    } 
    return e==[] ? nil : e 
  end 
end 
 
#============================================================================== 
# ■ Window_SGold 
#------------------------------------------------------------------------------ 
#  新的显示金钱窗口,可以显示多重货币。 
#============================================================================== 
class Window_SGold < Window_Base 
  def initialize(x, y, c=-1) 
    a = 1 
    @Money = [] 
    for i in 0...Currency::number 
      @money.push(i) if Currency.show?(i) 
    end 
    a = @money.size if c == -1 
    super(x, y, 160, a * WLH + 32) 
    @currency = c 
    refresh 
  end 
  def refresh 
    self.contents.clear 
     
    if @currency == -1 
      for i in @money 
        draw_scurrency_value(i, 4, i*WLH, 120) 
      end 
    else 
      draw_scurrency_value(@currency, 4, 0, 120) 
    end 
  end 
  def draw_scurrency_value(i, x, y, width) 
    cx = contents.text_size(Vocab::gold).width 
    self.contents.font.color = normal_color 
    self.contents.draw_text(x, y, width-cx-2, WLH, $game_party.curr(i), 2) 
    self.contents.font.color = system_color 
    self.contents.draw_text(x, y, width, WLH, Currency.name(i), 2) 
  end 
end 
   
#============================================================================== 
# ■ Window_ShopBuy 
#------------------------------------------------------------------------------ 
#  商店画面、浏览显示可以购买的商品的窗口。 
#============================================================================== 
class Window_ShopBuy < Window_Selectable 
  #-------------------------------------------------------------------------- 
  # ● 初始化对像 
  #     x : 窗口 X 座标 
  #     y : 窗口 Y 座标 
  #     c : 货币类型 
  #-------------------------------------------------------------------------- 
  def initialize(x, y, c=0) 
    super(x, y, 304, 304) 
    @shop_goods = $game_temp.shop_goods 
    @currency = c 
    refresh 
    self.index = 0 
  end 
  #-------------------------------------------------------------------------- 
  # ● 绘制商品 
  #     index : 商品索引 
  #-------------------------------------------------------------------------- 
  def draw_item(index) 
    item = @data[index] 
    number = $game_party.item_number(item) 
    price = Currency.get_n_rate(@currency, item.price) 
    gold  = Currency.get_g_rate(@currency) 
     
    enabled = Currency.can_use?(@currency, item) 
    enabled = ( price <= gold and number < 99) if enabled 
     
    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,price, 2) 
  end 
end 
class Window_ShopStatus < Window_Base 
  alias curr_refresh refresh 
  def refresh 
    curr_refresh 
    currency = [] 
    money = "" 
    if @item != nil 
      for i in 0...Currency::number 
        currency.push(i) if Currency.can_use?(i, @item) 
      end 
      for i in currency 
        money += "、" if i>0 and i<=currency.size 
        money += Currency.name(i) 
      end 
      string = sprintf(Currency::One_Currency, money) 
      self.contents.draw_text(4, 24, 200, WLH, string,1) 
    end 
  end 
end 
#============================================================================== 
# ■ Scene_Shop 
#------------------------------------------------------------------------------ 
#  处理商店画面的类。 
#============================================================================== 
 
class Scene_Shop < Scene_Base 
  def initialize(c=nil) 
    if c==nil 
      @special_currency = false 
      @currency = 0 
    else 
      @special_currency = true 
      @currency = c 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● 开始处理 
  #-------------------------------------------------------------------------- 
  alias c_start start 
  def start 
    c_start 
    @command = [] 
    for i in 0...Currency::number 
      if Currency.can_use?(i) 
        @command.push(Currency::id(i)) 
      end 
    end 
       
    @currency_window = Window_Command.new(160, @command, 1, 3) 
    @currency_window.x = 384 
    @currency_window.y = 56 
    @currency_window.active = false 
    @currency_window.visible = false 
    @gold_window = Window_SGold.new(384, 56, @currency) 
  end 
  #-------------------------------------------------------------------------- 
  # ● 结束处理 
  #-------------------------------------------------------------------------- 
  alias c_term terminate 
  def terminate 
    c_term 
    @currency_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 
    @currency_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 
    elsif @currency_window.active 
      update_currency_selection 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● 生成命令窗口 
  #-------------------------------------------------------------------------- 
  def create_command_window 
    s1 = Vocab::ShopBuy 
    s2 = Vocab::ShopSell 
    s3 = Vocab::ShopCancel 
    s4 = Currency.word 
    @command_window = Window_Command.new(384, [s1, s2, s4, s3], 4) 
    @command_window.y = 56 
    @command_window.draw_item(2, false) if @special_currency 
    if $game_temp.shop_purchase_only 
      @command_window.draw_item(1, false) 
    end 
  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 3  # 离开 
        Sound.play_decision 
        $scene = Scene_Map.new 
      when 2  # 货币 
        unless @special_currency 
          Sound.play_decision 
          @currency_window.active = true 
          @currency_window.visible = true 
          @command_window.active = false 
          @gold_window.visible = false 
        else 
          Sound.play_buzzer 
        end 
      end 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● 更新货币选择窗口 
  #-------------------------------------------------------------------------- 
  def update_currency_selection 
    if Input.trigger?(Input::B) 
      Sound.play_cancel 
      @currency_window.active = false 
      @currency_window.visible = false 
      @command_window.active = true 
      @gold_window.visible = true 
    elsif Input.trigger?(Input::C) 
      Sound.play_decision 
      @currency_window.active = false 
      @currency_window.visible = false 
      @command_window.active = true 
      @currency = @currency_window.index 
      @buy_window.dispose 
      @buy_window = Window_ShopBuy.new(0, 112, @currency) 
      @buy_window.active = false 
      @buy_window.visible = false 
      @gold_window.dispose 
      @gold_window = Window_SGold.new(384, 56, @currency) 
    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) 
      price = Currency.get_n_rate(@currency, @item.price) 
      gold  = Currency.get_g_rate(@currency) 
 
      enabled = Currency.can_use?(@currency, @item) 
      enabled = ( price <= gold and number < 99) if enabled 
       
      unless enabled 
        Sound.play_buzzer 
      else 
        Sound.play_decision 
        max = price == 0 ? 99 : gold / @item.price 
        max = [max, 99 - 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 decide_number_input 
    Sound.play_shop 
    @number_window.active = false 
    @number_window.visible = false 
    case @command_window.index 
    when 0  # 买入 
      gold = @number_window.number * @item.price 
      $game_party.lose_curr(@currency_window.index, gold) 
       
      $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  # 卖出 
      gold = @number_window.number * (@item.price / 2) 
      $game_party.gain_curr(@currency_window.index, gold) 
      $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  |   
 
 
 
 |