Project1

标题: [RMVA]装备等级、属性限制 Ver 1.2 [打印本页]

作者: 后知后觉    时间: 2012-7-24 00:56
标题: [RMVA]装备等级、属性限制 Ver 1.2
本帖最后由 后知后觉 于 2012-7-26 00:06 编辑


这个貌似已经有一个现成脚本了.只是好像有bug而作者又很久没上了.所以我就......

【更新日志】
Ver1.2 2012-7-25
  增加【装备画面光标在物品栏不符条件的装备上时,状态窗口也会显示角色在装上该装备后的属性】的功能
  增加【商店画面状态窗口显示因等级、属性限制而无法使用的装备对角色属性影响的信息】的功能
Ver1.1 2012-7-24
  增加【不够要求的装备在装备画面的物品栏也会显示.名字颜色减淡】的功能

【代码如下】

  1. #==============================================================================
  2. # ■ 装备等级、属性限制 作者:后知后觉 2012-7-25 Ver:1.2
  3. #--------------------------------------------------------------------------
  4. #    本脚本来自 www.66rpg.com 使用或转载请保留此信息。
  5. #--------------------------------------------------------------------------
  6. #~   说明:
  7. #~     限制的属性只会计算人物当前的基础属性.装备、状态增加的属性不会计算在内
  8. #~     默认给武器、护甲增加一行说明.说明内容是需要的各种限制信息
  9. #~     但默认帮助窗口一共只能显示2行内容.
  10. #~     因此你在数据库设置武器、护甲说明的时候
  11. #~     如果设置了2行内容.那么这新增加的第3行将无法显示出来.
  12. #~   设置:
  13. #~     在武器、护甲的备注里写入下面格式的内容表示要做要求.
  14. #~       <lv 数值>    等级限制
  15. #~       <mhp 数值>   最大HP限制
  16. #~       <mmp 数值>   最大MP限制
  17. #~       <atk 数值>   物理攻击限制
  18. #~       <pdf 数值>   物理防御限制
  19. #~       <mat 数值>   魔法攻击限制
  20. #~       <mdf 数值>   魔法防御限制
  21. #~       <agi 数值>   敏捷限制
  22. #~       <luk 数值>   幸运限制
  23. #==============================================================================
  24. #==============================================================================
  25. # ■ RPG::EquipItem
  26. #==============================================================================

  27. class RPG::EquipItem < RPG::BaseItem
  28.   ParamName = ["mhp","mmp","atk","pdf","mat","mdf","agi","luk"]
  29.   def description
  30.     return @hzhj_desc if @hzhj_desc
  31.     @hzhj_desc = @description.clone + "\n\\}"
  32.     hzhj = " "
  33.     if level_limit > 0
  34.       hzhj = "装备要求 "
  35.       @hzhj_desc += sprintf("%s%s:%d ", hzhj, Vocab.level, level_limit)
  36.     end
  37.     for i in 0..7
  38.       if params_limit(i) > 0
  39.         hzhj = "" if hzhj == "装备要求 "
  40.         hzhj = "装备要求 " if hzhj == " "
  41.         @hzhj_desc += sprintf("%s%s:%d ", hzhj, Vocab.param(i), params_limit(i))
  42.       end
  43.     end
  44.     @hzhj_desc
  45.   end
  46.   def level_limit
  47.     if /<lv (\d+?)>/i =~ @note
  48.       return $1.to_i
  49.     else
  50.       return 0
  51.     end
  52.   end
  53.   def params_limit(param_id)
  54.     if /<#{ParamName[param_id]} (\d+?)>/i =~ @note
  55.       return $1.to_i
  56.     else
  57.       return 0
  58.     end
  59.   end
  60. end
  61. #==============================================================================
  62. # ■ Game_BattlerBase
  63. #==============================================================================

  64. class Game_BattlerBase
  65.   #--------------------------------------------------------------------------
  66.   # ● 判定物品是否可以装备
  67.   #--------------------------------------------------------------------------
  68.   alias original_equippable? equippable?
  69.   def equippable?(item)
  70.     original_equippable?(item) && equip_params_ok?(item)
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ● 判定物品是否可以装备
  74.   #--------------------------------------------------------------------------
  75.   def equip_params_ok?(item)
  76.     return true if enemy?
  77.     return false if item.level_limit > level
  78.     for param_id in 0..7
  79.       value = param_base(param_id) + @param_plus[param_id]
  80.       value = [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
  81.       return false if item.params_limit(param_id) > value
  82.     end
  83.     return true
  84.   end
  85. end
  86. #==============================================================================
  87. # ■ Game_Actor
  88. #==============================================================================

  89. class Game_Actor < Game_Battler
  90.   #--------------------------------------------------------------------------
  91.   # ● 强制更换装备
  92.   #--------------------------------------------------------------------------
  93.   def hzhj_force_change_equip(slot_id, item)
  94.     @equips[slot_id].object = item if original_equippable?(item) || !item
  95.   end
  96. end
  97. #==============================================================================
  98. # ■ Window_EquipItem
  99. #==============================================================================

  100. class Window_EquipItem < Window_ItemList
  101.   #--------------------------------------------------------------------------
  102.   # ● 查询使用列表中是否含有此物品
  103.   #--------------------------------------------------------------------------
  104.   def include?(item)
  105.     return true if item == nil
  106.     return false unless item.is_a?(RPG::EquipItem)
  107.     return false if @slot_id < 0
  108.     return false if item.etype_id != @actor.equip_slots[@slot_id]
  109.     return @actor.original_equippable?(item)
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● 查询此文件是否可以装备
  113.   #--------------------------------------------------------------------------
  114.   def enable?(item)
  115.     return true unless item
  116.     return @actor.equippable?(item)
  117.   end
  118.   #--------------------------------------------------------------------------
  119.   # ● 更新帮助内容
  120.   #--------------------------------------------------------------------------
  121.   def update_help
  122.     super
  123.     if @actor && @status_window
  124.       temp_actor = Marshal.load(Marshal.dump(@actor))
  125.       temp_actor.hzhj_force_change_equip(@slot_id, item)
  126.       @status_window.set_temp_actor(temp_actor)
  127.     end
  128.   end
  129. end
  130. #==============================================================================
  131. # ■ Window_ShopStatus
  132. #==============================================================================




  133. class Window_ShopStatus < Window_Base
  134.   #--------------------------------------------------------------------------
  135.   # ● 绘制角色的装备信息
  136.   #--------------------------------------------------------------------------
  137.   def draw_actor_equip_info(x, y, actor)
  138.     enabled = actor.equippable?(@item)
  139.     change_color(normal_color, enabled)
  140.     draw_text(x, y, 112, line_height, actor.name)
  141.     item1 = current_equipped_item(actor, @item.etype_id)
  142.     draw_actor_param_change(x, y, actor, item1) if actor.original_equippable?(@item)
  143.     draw_item_name(item1, x, y + line_height, enabled)
  144.   end
  145. end

复制代码

作者: 包子丶    时间: 2012-7-24 09:15
可是条件不符合时它不会显示,,,可以改成条件不符时物品变黑吗?
作者: 后知后觉    时间: 2012-7-24 12:16
包子丶 发表于 2012-7-24 09:15
可是条件不符合时它不会显示,,,可以改成条件不符时物品变黑吗?

再试试看.多多测试!
作者: 什么喂    时间: 2012-7-24 15:26
不能装备名字变淡的功能很实用,原来的就不显示,无法和身上的装备进行对比啊
作者: 包子丶    时间: 2012-7-25 12:20
貌似有一个BUG..就是物品颜色变淡的话选定了能力值没有显示变化。。
作者: 后知后觉    时间: 2012-7-26 00:15
本帖最后由 后知后觉 于 2012-7-26 00:18 编辑
包子丶 发表于 2012-7-25 12:20
貌似有一个BUG..就是物品颜色变淡的话选定了能力值没有显示变化。。


因为无法装备.所以状态窗口显示的是该位置无装备时的角色属性.

作者: Luciffer    时间: 2012-7-26 00:26
刚好可以用在新玩的坑里面,后大人果然很触。。。
作者: ANN244    时间: 2012-7-26 09:47
本帖最后由 ANN244 于 2012-7-26 09:53 编辑

请问一下有办法兼容下面这个商店物品分类脚本吗?

http://www4.plala.or.jp/findias/ ... _ct_shop/index.html

这个分类脚本在使用时与装备等级、属性限制脚本出现冲突
是在增加了【商店画面状态窗口显示因等级、属性限制而无法使用的装备对角色属性影响的信息】的功能后才出现的问题

其他方面则暂时没有发现bug
作者: 后知后觉    时间: 2012-7-26 11:12
ANN244 发表于 2012-7-26 09:47
请问一下有办法兼容下面这个商店物品分类脚本吗?

http://www4.plala.or.jp/findias/codecrush/material/v ...

商店部分其实我就只改了一行.不过改的那个方法是重定义所以就冲突了...
把这个商店脚本放在装备限制脚本的下面.也就是更靠近 Main 脚本的位置.
就可以保证这个商店脚本功能完整正常运行.
如果想要在商店的状态窗口里增加这次我更新的商店的这个功能.
就找到这个商店脚本的第 1071 行左右能看到这样的一段内容.

  1.   #--------------------------------------------------------------------------
  2.   # ● アクターの能力値変化を描画
  3.   #--------------------------------------------------------------------------
  4.   def draw_actor_param_change(x, y, actor, item1, prm_id, enabled)
  5.     rect = Rect.new(x, y, contents.width - 4 - x, line_height)
  6.     change = @item.params[prm_id] - (item1 ? item1.params[prm_id] : 0)
  7.     change_color(system_color, enabled)
  8.     draw_text(rect, $data_system.terms.params[prm_id])
  9.     if enabled
  10.       change_color(param_change_color(change), enabled)
  11.       draw_text(rect, sprintf("%+d", change), 2)
  12.     else
  13.       change_color(normal_color, enabled)
  14.       draw_text(rect, "―", 2)
  15.     end
  16.   end
复制代码
在这一行
  def draw_actor_param_change(x, y, actor, item1, prm_id, enabled)
的下面加一行
    enabled = actor.original_equippable?(@item)
就可以了.
改完后就是这样.就只增加了这一行.别的都没动


  1.   #--------------------------------------------------------------------------
  2.   # ● アクターの能力値変化を描画
  3.   #--------------------------------------------------------------------------
  4.   def draw_actor_param_change(x, y, actor, item1, prm_id, enabled)
  5.     enabled = actor.original_equippable?(@item)
  6.     rect = Rect.new(x, y, contents.width - 4 - x, line_height)
  7.     change = @item.params[prm_id] - (item1 ? item1.params[prm_id] : 0)
  8.     change_color(system_color, enabled)
  9.     draw_text(rect, $data_system.terms.params[prm_id])
  10.     if enabled
  11.       change_color(param_change_color(change), enabled)
  12.       draw_text(rect, sprintf("%+d", change), 2)
  13.     else
  14.       change_color(normal_color, enabled)
  15.       draw_text(rect, "―", 2)
  16.     end
  17.   end
复制代码

作者: xuzhengchi    时间: 2012-7-29 15:58
这个装备限制脚本是我搜集的同类脚本的最好的~感谢LZ~
期待LZ出个负重脚本嘿嘿~
作者: love9880    时间: 2013-1-6 21:43
和 装备系统属性说明 的那个不能兼容,在说明窗口,等级后面的字都变小了。




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