Project1

标题: 多货币系统,让你的货币贸易动起来!XP通用 [打印本页]

作者: 帕克    时间: 2011-5-25 13:31
标题: 多货币系统,让你的货币贸易动起来!XP通用
多货币系统(by.帕克),用变量控制货币种类,然后还是用变量控制货币数量。
本人纯手亲写,如有雷同,纯属无意……
  1. #==============================================================================
  2. # ■ 多货币系统
  3. #------------------------------------------------------------------------------
  4. #         ——by.帕克
  5. #==============================================================================
  6. #这个很简单的。第一货币用金钱控制即可,其余货币用变量控制,改变货币种类
  7. #同样用变量。

  8. $控制货币种类的变量 = 1  #这里填写控制货币种类的变量为几号变量,为1号变量即人名币,2号即美元等等

  9. $第二货币数量的变量 = 2  #这里填写你要用几号变量控制第二货币,依此类推。
  10. $第三货币数量的变量 = 3
  11. $第四货币数量的变量 = 4
  12. $第五货币数量的变量 = 5

  13. $第二货币的名称 = "美元"
  14. $第三货币的名称 = "欧元"
  15. $第四货币的名称 = "越南盾"
  16. $第五货币的名称 = "英镑"
  17. class Window_Gold < Window_Base
  18.   #--------------------------------------------------------------------------
  19.   # ● 初始化窗口
  20.   #--------------------------------------------------------------------------
  21.   def initialize
  22.     super(0, 0, 160, 64)
  23.     self.contents = Bitmap.new(width - 32, height - 32)
  24.     refresh
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 刷新
  28.   #--------------------------------------------------------------------------
  29. def refresh
  30.     self.contents.clear
  31.     cx = contents.text_size($data_system.words.gold).width
  32.     self.contents.font.color = normal_color
  33.   case $game_variables[$控制货币种类的变量]
  34.    when 0
  35.     self.contents.draw_text(4, 0, 120-cx-2, 32, $game_party.gold.to_s, 2)
  36.    when 1
  37.     self.contents.draw_text(4, 0, 120-cx-2, 32, $game_variables[$第二货币数量的变量].to_s, 2)
  38.    when 2
  39.     self.contents.draw_text(4, 0, 120-cx-2, 32, $game_variables[$第三货币数量的变量].to_s, 2)
  40.    when 3
  41.     self.contents.draw_text(4, 0, 120-cx-2, 32, $game_variables[$第四货币数量的变量].to_s, 2)
  42.    when 4
  43.     self.contents.draw_text(4, 0, 120-cx-2, 32, $game_variables[$第五货币数量的变量].to_s, 2)
  44.     end
  45.     self.contents.font.color = system_color
  46.   case $game_variables[1]
  47.    when 0
  48.     self.contents.draw_text(124-cx, 0, cx, 32, $data_system.words.gold, 2)
  49.    when 1
  50.     self.contents.draw_text(124-cx, 0, cx, 32, $第二货币的名称, 2)
  51.    when 2
  52.     self.contents.draw_text(124-cx, 0, cx, 32, $第三货币的名称, 2)
  53.    when 3
  54.     self.contents.draw_text(124-cx, 0, cx, 32, $第四货币的名称, 2)
  55.    when 4
  56.     self.contents.draw_text(124-cx, 0, cx, 32, $第五货币的名称, 2)
  57.     end
  58.   end
  59. end
  60. class Scene_Shop
  61.   #--------------------------------------------------------------------------
  62.   # ● 主处理
  63.   #--------------------------------------------------------------------------
  64.   def main
  65.     # 生成帮助窗口
  66.     @help_window = Window_Help.new
  67.     # 生成指令窗口
  68.     @command_window = Window_ShopCommand.new
  69.     # 生成金钱窗口
  70.     @gold_window = Window_Gold.new
  71.     @gold_window.x = 480
  72.     @gold_window.y = 64
  73.     # 生成时间窗口
  74.     @dummy_window = Window_Base.new(0, 128, 640, 352)
  75.     # 生成购买窗口
  76.     @buy_window = Window_ShopBuy.new($game_temp.shop_goods)
  77.     @buy_window.active = false
  78.     @buy_window.visible = false
  79.     @buy_window.help_window = @help_window
  80.     # 生成卖出窗口
  81.     @sell_window = Window_ShopSell.new
  82.     @sell_window.active = false
  83.     @sell_window.visible = false
  84.     @sell_window.help_window = @help_window
  85.     # 生成数量输入窗口
  86.     @number_window = Window_ShopNumber.new
  87.     @number_window.active = false
  88.     @number_window.visible = false
  89.     # 生成状态窗口
  90.     @status_window = Window_ShopStatus.new
  91.     @status_window.visible = false
  92.     # 执行过渡
  93.     Graphics.transition
  94.     # 主循环
  95.     loop do
  96.       # 刷新游戏画面
  97.       Graphics.update
  98.       # 刷新输入信息
  99.       Input.update
  100.       # 刷新画面
  101.       update
  102.       # 如果画面切换的话就中断循环
  103.       if $scene != self
  104.         break
  105.       end
  106.     end
  107.     # 准备过渡
  108.     Graphics.freeze
  109.     # 释放窗口
  110.     @help_window.dispose
  111.     @command_window.dispose
  112.     @gold_window.dispose
  113.     @dummy_window.dispose
  114.     @buy_window.dispose
  115.     @sell_window.dispose
  116.     @number_window.dispose
  117.     @status_window.dispose
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # ● 刷新画面
  121.   #--------------------------------------------------------------------------
  122.   def update
  123.     # 刷新窗口
  124.     @help_window.update
  125.     @command_window.update
  126.     @gold_window.update
  127.     @dummy_window.update
  128.     @buy_window.update
  129.     @sell_window.update
  130.     @number_window.update
  131.     @status_window.update
  132.     # 指令窗口激活的情况下: 调用 update_command
  133.     if @command_window.active
  134.       update_command
  135.       return
  136.     end
  137.     # 购买窗口激活的情况下: 调用 update_buy
  138.     if @buy_window.active
  139.       update_buy
  140.       return
  141.     end
  142.     # 卖出窗口激活的情况下: 调用 update_sell
  143.     if @sell_window.active
  144.       update_sell
  145.       return
  146.     end
  147.     # 个数输入窗口激活的情况下: 调用 update_number
  148.     if @number_window.active
  149.       update_number
  150.       return
  151.     end
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● 刷新画面 (指令窗口激活的情况下)
  155.   #--------------------------------------------------------------------------
  156.   def update_command
  157.     # 按下 B 键的情况下
  158.     if Input.trigger?(Input::B)
  159.       # 演奏取消 SE
  160.       $game_system.se_play($data_system.cancel_se)
  161.       # 切换到地图画面
  162.       $scene = Scene_Map.new
  163.       return
  164.     end
  165.     # 按下 C 键的情况下
  166.     if Input.trigger?(Input::C)
  167.       # 命令窗口光标位置分支
  168.       case @command_window.index
  169.       when 0  # 购买
  170.         # 演奏确定 SE
  171.         $game_system.se_play($data_system.decision_se)
  172.         # 窗口状态转向购买模式
  173.         @command_window.active = false
  174.         @dummy_window.visible = false
  175.         @buy_window.active = true
  176.         @buy_window.visible = true
  177.         @buy_window.refresh
  178.         @status_window.visible = true
  179.       when 1  # 卖出
  180.         # 演奏确定 SE
  181.         $game_system.se_play($data_system.decision_se)
  182.         # 窗口状态转向卖出模式
  183.         @command_window.active = false
  184.         @dummy_window.visible = false
  185.         @sell_window.active = true
  186.         @sell_window.visible = true
  187.         @sell_window.refresh
  188.       when 2  # 取消
  189.         # 演奏确定 SE
  190.         $game_system.se_play($data_system.decision_se)
  191.         # 切换到地图画面
  192.         $scene = Scene_Map.new
  193.       end
  194.       return
  195.     end
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # ● 刷新画面 (购买窗口激活的情况下)
  199.   #--------------------------------------------------------------------------
  200.   def update_buy
  201.     # 设置状态窗口的物品
  202.     @status_window.item = @buy_window.item
  203.     # 按下 B 键的情况下
  204.     if Input.trigger?(Input::B)
  205.       # 演奏取消 SE
  206.       $game_system.se_play($data_system.cancel_se)
  207.       # 窗口状态转向初期模式
  208.       @command_window.active = true
  209.       @dummy_window.visible = true
  210.       @buy_window.active = false
  211.       @buy_window.visible = false
  212.       @status_window.visible = false
  213.       @status_window.item = nil
  214.       # 删除帮助文本
  215.       @help_window.set_text("")
  216.       return
  217.     end
  218.     # 按下 C 键的情况下
  219.     if Input.trigger?(Input::C)
  220.       # 获取物品
  221.       @item = @buy_window.item
  222.       # 物品无效的情况下、或者价格在所持金以上的情况下
  223.       if @item == nil or @item.price > $game_party.gold
  224.         # 演奏冻结 SE
  225.         $game_system.se_play($data_system.buzzer_se)
  226.         return
  227.       end
  228.       # 获取物品所持数
  229.       case @item
  230.       when RPG::Item
  231.         number = $game_party.item_number(@item.id)
  232.       when RPG::Weapon
  233.         number = $game_party.weapon_number(@item.id)
  234.       when RPG::Armor
  235.         number = $game_party.armor_number(@item.id)
  236.       end
  237.       # 如果已经拥有了 99 个情况下
  238.       if number == 99
  239.         # 演奏冻结 SE
  240.         $game_system.se_play($data_system.buzzer_se)
  241.         return
  242.       end
  243.       # 演奏确定 SE
  244.       $game_system.se_play($data_system.decision_se)
  245.       # 计算可以最多购买的数量
  246.       max = @item.price == 0 ? 99 : $game_party.gold / @item.price
  247.       max = [max, 99 - number].min
  248.       # 窗口状态转向数值输入模式
  249.       @buy_window.active = false
  250.       @buy_window.visible = false
  251.       @number_window.set(@item, max, @item.price)
  252.       @number_window.active = true
  253.       @number_window.visible = true
  254.     end
  255.   end
  256.   #--------------------------------------------------------------------------
  257.   # ● 画面更新 (卖出窗口激活的情况下)
  258.   #--------------------------------------------------------------------------
  259.   def update_sell
  260.     # 按下 B 键的情况下
  261.     if Input.trigger?(Input::B)
  262.       # 演奏取消 SE
  263.       $game_system.se_play($data_system.cancel_se)
  264.       # 窗口状态转向初期模式
  265.       @command_window.active = true
  266.       @dummy_window.visible = true
  267.       @sell_window.active = false
  268.       @sell_window.visible = false
  269.       @status_window.item = nil
  270.       # 删除帮助文本
  271.       @help_window.set_text("")
  272.       return
  273.     end
  274.     # 按下 C 键的情况下
  275.     if Input.trigger?(Input::C)
  276.       # 获取物品
  277.       @item = @sell_window.item
  278.       # 设置状态窗口的物品
  279.       @status_window.item = @item
  280.       # 物品无效的情况下、或者价格为 0 (不能卖出) 的情况下
  281.       if @item == nil or @item.price == 0
  282.         # 演奏冻结 SE
  283.         $game_system.se_play($data_system.buzzer_se)
  284.         return
  285.       end
  286.       # 演奏确定 SE
  287.       $game_system.se_play($data_system.decision_se)
  288.       # 获取物品的所持数
  289.       case @item
  290.       when RPG::Item
  291.         number = $game_party.item_number(@item.id)
  292.       when RPG::Weapon
  293.         number = $game_party.weapon_number(@item.id)
  294.       when RPG::Armor
  295.         number = $game_party.armor_number(@item.id)
  296.       end
  297.       # 最大卖出个数 = 物品的所持数
  298.       max = number
  299.       # 窗口状态转向个数输入模式
  300.       @sell_window.active = false
  301.       @sell_window.visible = false
  302.       @number_window.set(@item, max, @item.price / 2)
  303.       @number_window.active = true
  304.       @number_window.visible = true
  305.       @status_window.visible = true
  306.     end
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # ● 刷新画面 (个数输入窗口激活的情况下)
  310.   #--------------------------------------------------------------------------
  311.   def update_number
  312.     # 按下 B 键的情况下
  313.     if Input.trigger?(Input::B)
  314.       # 演奏取消 SE
  315.       $game_system.se_play($data_system.cancel_se)
  316.       # 设置个数输入窗口为不活动·非可视状态
  317.       @number_window.active = false
  318.       @number_window.visible = false
  319.       # 命令窗口光标位置分支
  320.       case @command_window.index
  321.       when 0  # 购买
  322.         # 窗口状态转向购买模式
  323.         @buy_window.active = true
  324.         @buy_window.visible = true
  325.       when 1  # 卖出
  326.         # 窗口状态转向卖出模式
  327.         @sell_window.active = true
  328.         @sell_window.visible = true
  329.         @status_window.visible = false
  330.       end
  331.       return
  332.     end
  333.     # 按下 C 键的情况下
  334.     if Input.trigger?(Input::C)
  335.       # 演奏商店 SE
  336.       $game_system.se_play($data_system.shop_se)
  337.       # 设置个数输入窗口为不活动·非可视状态
  338.       @number_window.active = false
  339.       @number_window.visible = false
  340.       # 命令窗口光标位置分支
  341.       case @command_window.index
  342.       when 0  # 购买
  343.         # 购买处理
  344.        case $game_variables[$控制货币种类的变量]
  345.         when 0
  346.         $game_party.lose_gold(@number_window.number * @item.price)
  347.         when 1
  348.          $game_variables[$第二货币数量的变量]-=(@number_window.number * @item.price)
  349.         when 2
  350.          $game_variables[$第三货币数量的变量]-=(@number_window.number * @item.price)
  351.         when 3
  352.          $game_variables[$第四货币数量的变量]-=(@number_window.number * @item.price)
  353.         when 4
  354.          $game_variables[$第五货币数量的变量]-=(@number_window.number * @item.price)
  355.         end
  356.         case @item
  357.         when RPG::Item
  358.           $game_party.gain_item(@item.id, @number_window.number)
  359.         when RPG::Weapon
  360.           $game_party.gain_weapon(@item.id, @number_window.number)
  361.         when RPG::Armor
  362.           $game_party.gain_armor(@item.id, @number_window.number)
  363.         end
  364.         # 刷新各窗口
  365.         @gold_window.refresh
  366.         @buy_window.refresh
  367.         @status_window.refresh
  368.         # 窗口状态转向购买模式
  369.         @buy_window.active = true
  370.         @buy_window.visible = true
  371.       when 1  # 卖出
  372.         # 卖出处理
  373.        case $game_variables[$控制货币种类的变量]
  374.         when 0
  375.         $game_party.gain_gold(@number_window.number * (@item.price / 2))
  376.         when 1
  377.          $game_variables[$第二货币数量的变量]+=(@number_window.number * (@item.price / 2))
  378.         when 2
  379.          $game_variables[$第三货币数量的变量]+=(@number_window.number * (@item.price / 2))
  380.         when 3
  381.          $game_variables[$第四货币数量的变量]+=(@number_window.number * (@item.price / 2))
  382.         when 4
  383.          $game_variables[$第五货币数量的变量]+=(@number_window.number * (@item.price / 2))
  384.         end
  385.         case @item
  386.         when RPG::Item
  387.           $game_party.lose_item(@item.id, @number_window.number)
  388.         when RPG::Weapon
  389.           $game_party.lose_weapon(@item.id, @number_window.number)
  390.         when RPG::Armor
  391.           $game_party.lose_armor(@item.id, @number_window.number)
  392.         end
  393.         # 刷新各窗口
  394.         @gold_window.refresh
  395.         @sell_window.refresh
  396.         @status_window.refresh
  397.         # 窗口状态转向卖出模式
  398.         @sell_window.active = true
  399.         @sell_window.visible = true
  400.         @status_window.visible = false
  401.       end
  402.       return
  403.     end
  404.   end
  405. end
复制代码



范例:
多货币系统.rar (191.13 KB, 下载次数: 2212)
作者: shidou    时间: 2011-5-27 00:33
谢谢了, 感觉很有用。。
作者: 忧雪の伤    时间: 2011-5-27 20:04
少用一下全局变量不会怎么样的。
作者: 冰舞蝶恋    时间: 2011-5-27 22:10
话说脚本有点长了呢,不用全局变量啊,这些都是常量的说,用module存储就可以了…………呃,习惯VX了。。不知道XP可不可以?全局用多了会卡,而且……还是中文名呢,呵呵。加油~和咱这个脚本废渣一起努力吧~~~{:nm_4:}
作者: get    时间: 2011-5-30 20:42
发现BUG

看了就知道了
作者: 英顺的马甲    时间: 2011-5-30 20:42
是新手吧
是我的话我绝对不会这么写,
建议使用 array[] 或者是 hash{}
至于如何去设定,你自己可以研究
构思不错,新手能做到这样算不错了,
继续努力吧
作者: 541176111    时间: 2012-6-6 01:13
谢了!


‘‘──541176111于2012-6-10 18:21补充以下内容:

我发现发现BUG
’’
作者: Mr.Puzzle    时间: 2012-6-14 07:36
选择了货币之后进入商店,但是购买物品显示的货币名称仍然是原来的
作者: y08y08    时间: 2012-7-26 12:27
这个 要收藏  O(∩_∩)O谢谢 分享
作者: yychchhh    时间: 2012-7-26 12:37
已收藏……要是有VX或者VA的版本就好啦!
作者: 吾本将心向明月    时间: 2012-8-1 12:26
收藏咯。。。~~~




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1