查看: 3500|回复: 1

[RMVA发布] 【VA】简单的装备负重系统

[复制链接]

梦石
0
星屑
9716
在线时间
2775 小时
注册时间
2008-9-5
回帖
3458

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

发表于 2016-5-7 13:14:49 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 cinderelmini 于 2016-6-4 20:39 编辑

□前面:

这是一个看到提问帖然后练习做出来的东西……
基本上基于默认系统上使用,由于和其他物品和装备系统冲突、或者需要其他扩展功能的话,
欢迎到【窝的委托小屋】来委(jiao)托(yi)。

□使用方法:

[fold=【物品项目(物品、武器、防具)重量的设定方法】]
  • 在物品的备注栏里输入:<重量: 数值>
  • 不设定的话使用Shiina模块里设定的默认值。
  • 通过 item.weight_param 调用。
[/fold]
[fold=【人物项目装备负重上限的设定方法】]
  • 在人物的备注栏里输入:<装备负重: 数值>
  • 不设定的话使用Shiina模块里设定的默认值。
  • 通过 actor.equip_weight_limit 调用。
  • 人物身上装备的总负重通过 actor.equip_total_weight 调用
[/fold]
其他的设定参考Shiina模块的注释自行设定,以及参考饭粒NPC说明。

□本体:
(代码存在BUG的话会在这里更新,但下方的饭粒包不会更新了。)
※2016-05-11更新:修正人物类的重量无法读取问题。


[fold=——代码——]
  1. #-------------------------------------------------------------------------------
  2. # □ 物品重量和角色装备的负重系统   By.椎名YASHIRO  20160507
  3. #---------------------------------------------------------------------------
  4. #  物品项目(物品、武器、防具)重量的设定方法:
  5. #    ·在物品的备注栏里输入:<重量: 数值>
  6. #    ·不设定的话使用Shiina模块里设定的默认值。
  7. #    ·通过 item.weight_param 调用。
  8. #  人物项目装备负重上限的设定方法:
  9. #    ·在人物的备注栏里输入:<装备负重: 数值>
  10. #    ·不设定的话使用Shiina模块里设定的默认值。
  11. #    ·通过 actor.equip_weight_limit 调用。
  12. #    ·人物身上装备的总负重通过 actor.equip_total_weight 调用
  13. #  其他的设定参考Shiina模块的注释自行设定。
  14. #-------------------------------------------------------------------------------


  15. # 前置设定
  16. module Shiina
  17.   # 人物统一默认的装备负重值
  18.   ActorEquipWeight = 20
  19.   
  20.   # 物品的默认单个重量
  21.   DefaultWeaponWeight = 0  # 武器
  22.   DefaultArmorWeight  = 0  # 防具
  23.   DefaultItemWeight   = 0  # 物品(暂时没用到)
  24.   
  25.   # 物品重量大于0的话,说明的末尾是否加上 重量表示(true/false)
  26.   ItemNeedShowWeight = true
  27. end


  28. # 物品项目扩展(负重)
  29. class RPG::BaseItem
  30.   #--------------------------------
  31.   # ○ 获取物品重量
  32.   #--------------------------------
  33.   def weight_param
  34.     case self
  35.     when RPG::Weapon
  36.       @weight_param = Shiina::DefaultWeaponWeight
  37.     when RPG::Armor
  38.       @weight_param = Shiina::DefaultArmorWeight
  39.     when RPG::Item
  40.       @weight_param = Shiina::DefaultItemWeight
  41.     else
  42.       @weight_param = 0
  43.     end
  44.     self.note.each_line do |line|
  45.       next unless line[/^<重量:\s?(.*)?>/]
  46.       @weight_param = $1.to_i
  47.       break
  48.     end
  49.     return @weight_param
  50.   end
  51.   #--------------------------------
  52.   # ○ 获取带重量表示的物品说明
  53.   #--------------------------------
  54.   alias sny46_160507_description description
  55.   def description
  56.     if !Shiina::ItemNeedShowWeight || self.weight_param <= 0
  57.       return sny46_160507_description
  58.     end
  59.     return "#{sny46_160507_description}\\c[24]【重量:#{self.weight_param}】"
  60.   end
  61. end


  62. # 角色项目扩展(负重)
  63. class Game_Actor < Game_Battler
  64.   #--------------------------------
  65.   # ○ 获取角色装备负重限制值
  66.   #--------------------------------
  67.   def equip_weight_limit
  68.     @equip_weight_limit = Shiina::ActorEquipWeight
  69.     actor.note.each_line do |line|
  70.       next unless line[/^<装备负重:\s?(.*)?>/]
  71.       @equip_weight_limit = $1.to_i
  72.       break
  73.     end
  74.     return @equip_weight_limit
  75.   end
  76.   #--------------------------------
  77.   # ○ 获取角色身上的装备重量总值
  78.   #--------------------------------
  79.   def equip_total_weight
  80.     equip_list = self.equips.compact
  81.     @equip_total_weight = equip_list.inject(0) do |result, equip|
  82.       result += equip.weight_param
  83.     end
  84.     return @equip_total_weight
  85.   end
  86. end




  87. # 装备窗口负重相关
  88. class Window_EquipStatus < Window_Base
  89.   #--------------------------------
  90.   # ○ 刷新(增加负重显示,如果不要就删掉这段)
  91.   #--------------------------------
  92.   alias sny46_160507_refresh refresh
  93.   def refresh
  94.     sny46_160507_refresh
  95.     draw_weight
  96.   end
  97.   #--------------------------------
  98.   # ○ 绘制负重
  99.   #--------------------------------
  100.   def draw_weight
  101.     return unless @actor
  102.     actor = @temp_actor || @actor
  103.     a = actor.equip_total_weight
  104.     b = actor.equip_weight_limit
  105.     weight_text = sprintf("【%s/%s】", a.to_s, b.to_s)
  106.     change_color(a > b ? text_color(10) : normal_color)
  107.     draw_text(0, 0, contents.width, line_height, weight_text, 2)
  108.   end
  109. end




  110. class Window_EquipItem < Window_ItemList
  111.   #--------------------------------
  112.   # ○ 查询此文件是否可以装备(增加超重判定)
  113.   #--------------------------------
  114.   alias sny46_160507_enable? enable?
  115.   def enable?(item)
  116.     # 默认判定
  117.     basic = sny46_160507_enable?(item)
  118.     # 没有角色的话就返回默认判定
  119.     return basic unless @actor
  120.     # 获取角色对应位置上的装备
  121.     equiped = @actor.equips[@slot_id]
  122.     # 获取身上装备的重量和当前物品的重量,没有就取0
  123.     ew = equiped ? equiped.weight_param : 0
  124.     iw = self.item ? self.item.weight_param : 0
  125.     # 检查更替装备后是否超过角色负重
  126.     check = (@actor.equip_total_weight - ew + iw) <= @actor.equip_weight_limit
  127.     # 在默认判定之后再判定是否超重
  128.     return (basic && check)
  129.   end
  130. end
复制代码
[/fold]

还有一个用来买节操的饭粒⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄:
装备负重.zip (1.43 MB, 下载次数: 162)

评分

参与人数 1星屑 +60 收起 理由
alpacanist + 60 塞糖

查看全部评分

梦石
0
星屑
287
在线时间
1580 小时
注册时间
2010-6-17
回帖
2818

开拓者贵宾

发表于 2016-5-12 08:40:48 | 显示全部楼层
占个沙发 求点糖

评分

参与人数 1星屑 +6 收起 理由
cinderelmini + 6 呐~糖

查看全部评分

快来点我一下,你会豁然开朗的
喵Kano特制
←开发中……

←暂时弃坑 电脑上资源全没
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部