Project1

标题: 求教货币单位进位的处理方式 [打印本页]

作者: deerdeer    时间: 2013-7-21 17:43
标题: 求教货币单位进位的处理方式
我想做出单一货币的进位效果,比如网游里常见的:1金币=100银币=10000铜币(百进制),或者在古代背景里适用的:1贯=1000文(千进制),或者现实背景下的:1元=10角=100分(十进制)

在论坛搜了一下,关于货币的帖子都是第二货币的,跟我的想法不是一回事

我想做的单一货币不需要兑换,也没有分别使用的商店系统,只需要在积累到进位数量后能显示新的单位就可以;在获得和失去金钱的时候也能自动计算(比如获得了1金10银,系统知道这等于110银或11000铜)
作者: deerdeer    时间: 2013-7-21 20:24
本帖最后由 deerdeer 于 2013-7-21 20:31 编辑

抱歉,我是脚本小白,不是太明白,可否麻烦你再指教一下 @ 345912390

我现在的理解是,游戏数据库中仍然使用基础单位(暂时用“文”来做例子)来设定价格,然后在每一个需要显示金钱的地方(主菜单、商店、战斗报酬等)都加上这句,来实现显示时的换算

我在windows_gold 里加了这句:
#--------------------------------------------------------------------------
  # ● 获取货币单位
  #--------------------------------------------------------------------------
  def currency_unit
    Vocab::currency_unit
     sprintf("%02d贯%02d文",value/1000, value % 1000)
  end

确实可以换算了,但是显示上还是有问题:



在换算过的数字之前还有个真实数字存在,请问这个该如何消除

另外一点是,当没持有金钱的情况下,文这个单位前面显示的是2位“0”而非3位,而获得金钱后就能正常显示3位数字,请问这个能改么:


作者: 喵呜喵5    时间: 2013-7-21 20:36
消除真实数字把Window_Gold第27行改成
  1. draw_currency_value("", currency_unit, 4, 0, contents.width - 8)
复制代码
应该就可以了……
作者: 喵呜喵5    时间: 2013-7-21 21:00
本帖最后由 喵呜喵5 于 2013-9-7 15:31 编辑

关于你的第二个问题,把脚本改成这样就好了

RUBY 代码复制
  1. sprintf("%03d贯%03d文",value/1000, value % 1000)


当然,我个人是喜欢这么来显示,你可以试试看(把脚本插到main以上你的脚本以下就可以了)

RUBY 代码复制
  1. =begin
  2.  
  3. ===============================================================================
  4.  元角分 By喵呜喵5
  5. ===============================================================================
  6.  
  7. 【说明】
  8.  
  9. 把金钱的显示方式修改成了XX元XX角XX分这样的形式
  10.  
  11. =end
  12.  
  13. module M5Money
  14. #==============================================================================
  15. #  设定部分
  16. #==============================================================================
  17.  
  18.   RATE  = 10
  19.  
  20.   #设定进制,例如10分=1角、10角=1元的时候就把上方的数字设置成10
  21.  
  22.   FEN = "分"
  23.   #设定游戏中1G所对应的单位,默认获得1G即获得1分钱
  24.  
  25.   JIAO = "角"
  26.   #设定游戏中1G*RATE所对应的单位
  27.  
  28.   YUAN = "元"
  29.   #设定游戏中1G*RATE*RATE所对应的单位
  30.  
  31. #==============================================================================
  32. #  设定结束
  33. #==============================================================================
  34. #==============================================================================
  35. #  脚本部分
  36. #==============================================================================
  37. end
  38.  
  39. class Window_Gold < Window_Base
  40.   def refresh
  41.     contents.clear
  42.     draw_currency_value("",m5_gain_gold($game_party.gold),4, 0,
  43.     contents.width - 8)
  44.   end  
  45.   def m5_gain_gold(gold)
  46.     yuan = gold / ( M5Money::RATE * M5Money::RATE)
  47.     val = (yuan == 0 ? "" : yuan.to_s + M5Money::YUAN )
  48.     jiao = (gold / M5Money::RATE) % M5Money::RATE
  49.     val += (jiao == 0 ? "" : jiao.to_s + M5Money::JIAO )
  50.     fen = gold % ( M5Money::RATE )
  51.     val += fen.to_s + M5Money::FEN
  52.   end
  53. end
  54. class << BattleManager
  55.   def gain_gold
  56.     if $game_troop.gold_total > 0
  57.       gold = $game_troop.gold_total
  58.       yuan = gold / ( M5Money::RATE * M5Money::RATE)
  59.       val = (yuan == 0 ? "" : yuan.to_s + M5Money::YUAN )
  60.       jiao = (gold / M5Money::RATE) % M5Money::RATE
  61.       val += (jiao == 0 ? "" : jiao.to_s + M5Money::JIAO )
  62.       fen = gold % ( M5Money::RATE )
  63.       val += fen.to_s + M5Money::FEN
  64.       text = '获得了' + val
  65.       $game_message.add('\.' + text)
  66.       $game_party.gain_gold($game_troop.gold_total)
  67.     end
  68.     wait_for_message
  69.   end
  70. end

作者: 雷欧亦炫    时间: 2013-9-7 07:48
不懂,有完整脚本吗?原脚本我不会改...




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