Project1

标题: 如何限制角色装备武器和护甲? [打印本页]

作者: twb122633    时间: 2013-5-15 13:54
标题: 如何限制角色装备武器和护甲?
本帖最后由 Sion 于 2013-5-25 17:00 编辑

如何限制角色装备武器和护甲? 我发现主角等级1的时候 什么高级的装备都能穿,如何限制主角装备武器和护甲。比如等级1的时候穿 布衣 等级5的时候才能穿皮衣 等级8的时候 装备皮甲 之类的。

QQ图片20130515135253.jpg (38.77 KB, 下载次数: 27)

QQ图片20130515135253.jpg

作者: twb122633    时间: 2013-5-15 13:55
以上的图片 主角等级1的时候 斧头之类的都能装备,如何限制主角等级高一点的时候才能装备~~!
作者: lirn    时间: 2013-5-15 14:13
我记得有类似脚本,自己搜索一下
作者: chd114    时间: 2013-5-15 14:20
装备等级限制脚本
作者: q374435503    时间: 2013-5-15 18:03
调公用事件条件分歧当xxx未到xxx级时不填当道了xxx级时更改装备

这只是个大概思想如果不可行请无视我!
作者: UdlDruid    时间: 2013-5-15 21:46
来,让我来解决你的问题!
脚本在此

  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 [url=home.php?mod=space&uid=95897]@actor[/url] && @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
复制代码

作者: 黄濑凉太    时间: 2013-5-15 22:38
我也发一个,本质上说是没有说明区别的了:
  1. =begin
  2. #============================================================================
  3. # 定义装备等级限制方法:在数据库装备备注里写上[LV n] ,LV后有空格,n为等级,
  4. # 同理,定义装备能力值限制方法:
  5. # 备注里写上[ATK n][DEF n][MAT n][MDF n][AGI n][LUK n]。
  6. #            攻击   防御   魔攻   魔防   敏捷   幸运
  7. # 若某项限制不写则没有装备限制。
  8. # 注意这里限制的能力值是人物原始的能力值,不考虑装备、状态的影响,
  9. # 但是考虑事件对能力值的影响。
  10. #==============================================================================
  11. #==============================================================================
  12. # ■ RPG::BaseItem
  13. #==============================================================================
  14. class RPG::BaseItem
  15.   def param_limit(p_id)
  16.     return if p_id == 0 or p_id > 7
  17.     regexp_strings = ["", "LV", "ATK", "DEF", "MAT", "MDF", "AGI", "LUK"]
  18.     m = 0
  19.     regexp = /\[#{regexp_strings[p_id]} (\d+)\]/
  20.     self.note.split(/[\r\n]+/).each { |line|
  21.       m = $1.to_i if line =~ regexp
  22.     }
  23.     return m
  24.   end
  25.   #--------------------------------------------------------------------------
  26.   # ● 判断是否有要求
  27.   #--------------------------------------------------------------------------
  28.   def has_requirement?
  29.     for i in 1..7
  30.       return true if param_limit(i) > 0
  31.     end
  32.     return false
  33.   end
  34. end
  35. class Game_Actor < Game_Battler
  36.   #--------------------------------------------------------------------------
  37.   # ● 判断是否可以装备
  38.   #     item : 物品
  39.   #--------------------------------------------------------------------------
  40.   alias original_equippable? equippable?
  41.   def equippable?(item)
  42.     return unless item
  43.     return true unless item.has_requirement?
  44.     return false if self.level < item.param_limit(1) #等级限制
  45.     for i in 2..7
  46.       return false if actor_param(i) < item.param_limit(i)
  47.     end
  48.     return original_equippable?(item)
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   # ● 计算角色能力值
  52.   #--------------------------------------------------------------------------
  53.   def actor_param(param_id)
  54.     t_p = param_base(param_id) + param_base(param_id)
  55.     return [t_p, param_max(param_id)].min
  56.   end
  57. end

  58. #==============================================================================
  59. # ■ Window_Item
  60. #------------------------------------------------------------------------------
  61. #  物品画面、战斗画面、显示浏览物品的窗口。
  62. #==============================================================================

  63. class Window_ItemList < Window_Selectable
  64.   #--------------------------------------------------------------------------
  65.   # ● 更新帮助文本(自动显示使用物品的等级能力限制)
  66.   #--------------------------------------------------------------------------
  67.   def update_help
  68.     if item.nil?
  69.       @help_window.set_text("")
  70.       return
  71.     end
  72.     newdes = item.description
  73.     if item.has_requirement?
  74.       newdes += "  要求:" if(item.has_requirement?)
  75.       for i in 1..7
  76.         next if item.param_limit(i) == 0
  77.         limit_str = item.param_limit(i).to_s
  78.         newdes += i==1 ? Vocab.level_a : Vocab.param(i) + limit_str
  79.       end
  80.     end
  81.     @help_window.set_text(newdes)
  82.   end
  83. end
  84. class Window_EquipItem < Window_ItemList
  85.   alias original_include? include?
  86.   def include?(item)
  87.     o_equippable = original_include?(item)
  88.     if !o_equippable
  89.       return true if [email protected]?(item)
  90.     end
  91.     return o_equippable
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 判断是否有效化
  95.   #--------------------------------------------------------------------------
  96.   def enable?(item)
  97.     return true unless item
  98.     return @actor.equippable?(item)
  99.   end
  100. end
  101. =end
复制代码
使用方法:
前往数据库武器\防具的装备备注上填下:
[LV n] ,LV后有空格,n为等级。
其他能力值同理:
备注里写上[ATK n] [DEF n][MAT n][MDF n][AGI n][LUK n]。
                [攻击]  [防御]  [魔攻]  [魔防]  [敏捷] [幸运]
作者: cccjjjcui    时间: 2013-5-15 22:53
我计划是不用脚本, 相同的职业 2个相同的武器类型 把低级的放一类 高级的放另一类  一个高级的职业可以带高级武器 一个低级不可以带高级武器
可惜这版本 特性不像以前 要是可以添加 公共事件就好了
作者: twb122633    时间: 2013-5-17 13:26
谢啦~~各位~~!




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