通过十号变量来切换商店显示的货币,本脚本还解决了其他第二货币脚本的buG,就是商店购买商品时会显示系统货币的BUG。
这是示意图片
下面是脚本,新手写的,可能有点繁琐,大家可以提出自己的意见。
RUBY 代码 - #==============================================================================
- # ■ 多货币系统·金银铜
- # 新增两种货币类型,通过变量控制商店使用的货币
- # 变量ID=10控制货币类型(0=金币,1=银币,2=铜币)
- # 灵狐阁主(刘飞洋)制作
- # 货币操作脚本命令:
- # - 金币:$game_party.gain_gold(数量) # 正数增加,负数减少
- # - 银币:$game_party.gain_sliver(数量) # 正数增加,负数减少
- # - 铜币:$game_party.gain_copper(数量) # 正数增加,负数减少
- #==============================================================================
- #==============================================================================
- # ■ Game_Party
- # 新增银币和铜币的属性及相关方法
- #==============================================================================
- class Game_Party
- # 新增银币和铜币的读取器
- attr_reader :sliver # 银币
- attr_reader :copper # 铜币
- #--------------------------------------------------------------------------
- # ● 初始化对象(重写)
- #--------------------------------------------------------------------------
- alias original_initialize initialize
- def initialize
- original_initialize
- @sliver = 0 # 新增:银币
- @copper = 0 # 新增:铜币
- end
- #--------------------------------------------------------------------------
- # ● 增加银币
- # n : 数量(正数增加,负数减少)
- #--------------------------------------------------------------------------
- def gain_sliver(n)
- @sliver = [[@sliver + n, 0].max, 9999999].min
- end
- #--------------------------------------------------------------------------
- # ● 减少银币
- # n : 数量
- #--------------------------------------------------------------------------
- def lose_sliver(n)
- gain_sliver(-n)
- end
- #--------------------------------------------------------------------------
- # ● 增加铜币
- # n : 数量(正数增加,负数减少)
- #--------------------------------------------------------------------------
- def gain_copper(n)
- @copper = [[@copper + n, 0].max, 9999999].min
- end
- #--------------------------------------------------------------------------
- # ● 减少铜币
- # n : 数量
- #--------------------------------------------------------------------------
- def lose_copper(n)
- gain_copper(-n)
- end
- #--------------------------------------------------------------------------
- # ● 获取当前活跃货币数量
- #--------------------------------------------------------------------------
- def current_currency
- case$game_variables[10] # 变量10控制货币类型
- when1then@sliver
- when2then@copper
- else@gold # 默认金币
- end
- end
- #--------------------------------------------------------------------------
- # ● 获取当前活跃货币名称
- #--------------------------------------------------------------------------
- def current_currency_name
- case$game_variables[10]
- when1then"银币" # 银币名称
- when2then"铜币" # 铜币名称
- else$data_system.words.gold # 原版金币名称
- end
- end
- #--------------------------------------------------------------------------
- # ● 减少当前活跃货币
- # n : 数量
- #--------------------------------------------------------------------------
- def lose_current_currency(n)
- case$game_variables[10]
- when1then lose_sliver(n)
- when2then lose_copper(n)
- else lose_gold(n)
- end
- end
- #--------------------------------------------------------------------------
- # ● 增加当前活跃货币
- # n : 数量
- #--------------------------------------------------------------------------
- def gain_current_currency(n)
- case$game_variables[10]
- when1then gain_sliver(n)
- when2then gain_copper(n)
- else gain_gold(n)
- end
- end
- end
- #==============================================================================
- # ■ Window_Gold
- # 修改金钱窗口以显示当前活跃货币
- #==============================================================================
- class Window_Gold < Window_Base
- #--------------------------------------------------------------------------
- # ● 刷新(重写)
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- # 获取当前货币名称和数量
- currency_name = $game_party.current_currency_name
- amount = $game_party.current_currency
- cx = contents.text_size(currency_name).width
- self.contents.font.color = normal_color
- self.contents.draw_text(4, 0, 120 - cx - 2, 32, amount.to_s, 2)
- self.contents.font.color = system_color
- self.contents.draw_text(124 - cx, 0, cx, 32, currency_name, 2)
- end
- end
- #==============================================================================
- # ■ Window_ShopBuy
- # 修改商店购买窗口显示当前货币
- #==============================================================================
- class Window_ShopBuy < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 绘制项目(重写)
- #--------------------------------------------------------------------------
- def draw_item(index)
- item = @data[index]
- case item
- whenRPG::Item
- number = $game_party.item_number(item.id)
- whenRPG::Weapon
- number = $game_party.weapon_number(item.id)
- whenRPG::Armor
- number = $game_party.armor_number(item.id)
- end
- if item.price $game_party.current_currency
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 获取物品持有数量
- case@item
- whenRPG::Item; number = $game_party.item_number(@item.id)
- whenRPG::Weapon; number = $game_party.weapon_number(@item.id)
- whenRPG::Armor; number = $game_party.armor_number(@item.id)
- end
- if number == 99
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- $game_system.se_play($data_system.decision_se)
- # 计算最大购买数量(基于当前货币)
- max = @item.price == 0 ? 99 : $game_party.current_currency / @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
- #--------------------------------------------------------------------------
- # ● 刷新画面 (个数输入窗口激活的情况下)(修改)
- #--------------------------------------------------------------------------
- def update_number
- if Input.trigger?(Input::B)
- $game_system.se_play($data_system.cancel_se)
- @number_window.active = false
- @number_window.visible = false
- case@command_window.index
- when0
- @buy_window.active = true
- @buy_window.visible = true
- when1
- @sell_window.active = true
- @sell_window.visible = true
- @status_window.visible = false
- end
- return
- end
- if Input.trigger?(Input::C)
- $game_system.se_play($data_system.shop_se)
- @number_window.active = false
- @number_window.visible = false
- case@command_window.index
- when0 # 购买处理(使用当前货币)
- total_price = @number_window.number * @item.price
- $game_party.lose_current_currency(total_price)
- case@item
- whenRPG::Item; $game_party.gain_item(@item.id, @number_window.number)
- whenRPG::Weapon; $game_party.gain_weapon(@item.id, @number_window.number)
- whenRPG::Armor; $game_party.gain_armor(@item.id, @number_window.number)
- end
- @gold_window.refresh
- @buy_window.refresh
- @status_window.refresh
- @buy_window.active = true
- @buy_window.visible = true
- when1 # 卖出处理(获得当前货币)
- total_price = @number_window.number * (@item.price / 2)
- $game_party.gain_current_currency(total_price)
- case@item
- whenRPG::Item; $game_party.lose_item(@item.id, @number_window.number)
- whenRPG::Weapon; $game_party.lose_weapon(@item.id, @number_window.number)
- whenRPG::Armor; $game_party.lose_armor(@item.id, @number_window.number)
- end
- @gold_window.refresh
- @sell_window.refresh
- @status_window.refresh
- @sell_window.active = true
- @sell_window.visible = true
- @status_window.visible = false
- end
- return
- end
- end
- end
复制代码
后面我在研究怎么魔改菜单的货币窗口,目前的情况是,如果那个十号变量没有归零,菜单的货币窗口显示的是第三或第二货币。
我下一步要考虑的是,要不把游戏时间和步数窗口废掉,直接竖排显示三种货币,实际上可以魔改扩充更多货币,这只是个思路。
本帖来自P1论坛作者刘飞洋,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址: https://rpg.blue/forum.php?mod=viewthread&tid=498008 若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。 |